aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--doc/ApplicationGuide.md4
-rw-r--r--policy_manager/CMakeLists.txt1
-rw-r--r--policy_manager/policy_manager.cpp31
-rw-r--r--src/layers.cpp16
-rw-r--r--src/util.cpp37
-rw-r--r--src/util.hpp12
-rw-r--r--src/window_manager.cpp28
-rw-r--r--src/window_manager.hpp5
8 files changed, 62 insertions, 72 deletions
diff --git a/doc/ApplicationGuide.md b/doc/ApplicationGuide.md
index 2240bb1..3470243 100644
--- a/doc/ApplicationGuide.md
+++ b/doc/ApplicationGuide.md
@@ -144,7 +144,9 @@ Configuration
The window manager is configured with the *layers.json* configuration
file, by default it is searched in `${AFM_APP_INSTALL_DIR}/etc/layers.json`.
-Note, that the window manager will use default configuration unless this configuration is found.
+However, if /etc/xdg/windowmanager/layers.json exists, it will be used instead.
+The window manager will use a default configuration unless a configuration file
+is found in one of these locations.
A sample configuration is provided with the window manager
implementation, this sample is installed to ${AFM_APP_INSTALL_DIR}/etc/layers.json.
diff --git a/policy_manager/CMakeLists.txt b/policy_manager/CMakeLists.txt
index 584d311..3ec4c39 100644
--- a/policy_manager/CMakeLists.txt
+++ b/policy_manager/CMakeLists.txt
@@ -45,6 +45,7 @@ add_library(${TARGETS_PM}
SHARED
policy_manager.cpp
stm/stm.c
+ ../src/util.cpp
)
target_include_directories(${TARGETS_PM}
diff --git a/policy_manager/policy_manager.cpp b/policy_manager/policy_manager.cpp
index c7bb007..f3d0d4d 100644
--- a/policy_manager/policy_manager.cpp
+++ b/policy_manager/policy_manager.cpp
@@ -1,5 +1,6 @@
/*
* Copyright (c) 2018 TOYOTA MOTOR CORPORATION
+ * Copyright (c) 2018 Konsulko Group
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -22,6 +23,7 @@
#include <algorithm>
#include <json-c/json.h>
#include "policy_manager.hpp"
+#include "util.hpp"
#include "hmi-debug.h"
extern "C"
@@ -729,20 +731,7 @@ int PolicyManager::setStateTransitionProcessToSystemd(int event_id, uint64_t del
int PolicyManager::loadRoleDb()
{
- std::string file_name;
-
- // Get afm application installed dir
- char const *afm_app_install_dir = getenv("AFM_APP_INSTALL_DIR");
- HMI_DEBUG("wm:pm", "afm_app_install_dir:%s", afm_app_install_dir);
-
- if (!afm_app_install_dir)
- {
- HMI_ERROR("wm:pm", "AFM_APP_INSTALL_DIR is not defined");
- }
- else
- {
- file_name = std::string(afm_app_install_dir) + std::string("/etc/roles.db");
- }
+ std::string file_name(get_file_path("roles.db", "wm:pm"));
// Load roles.db
json_object *json_obj;
@@ -832,19 +821,7 @@ int PolicyManager::loadStateDb()
{
HMI_DEBUG("wm:pm", "Call");
- // Get afm application installed dir
- char const *afm_app_install_dir = getenv("AFM_APP_INSTALL_DIR");
- HMI_DEBUG("wm:pm", "afm_app_install_dir:%s", afm_app_install_dir);
-
- std::string file_name;
- if (!afm_app_install_dir)
- {
- HMI_ERROR("wm:pm", "AFM_APP_INSTALL_DIR is not defined");
- }
- else
- {
- file_name = std::string(afm_app_install_dir) + std::string("/etc/states.db");
- }
+ std::string file_name(get_file_path("states.db", "wm:pm"));
// Load states.db
json_object *json_obj;
diff --git a/src/layers.cpp b/src/layers.cpp
index bbe7c09..21d975d 100644
--- a/src/layers.cpp
+++ b/src/layers.cpp
@@ -1,5 +1,6 @@
/*
* Copyright (c) 2017 TOYOTA MOTOR CORPORATION
+ * Copyright (c) 2018 Konsulko Group
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -18,6 +19,7 @@
#include "layers.hpp"
#include "json_helper.hpp"
+#include "util.hpp"
#include "hmi-debug.h"
namespace wm
@@ -210,19 +212,7 @@ int layer_map::loadAreaDb()
{
HMI_DEBUG("wm:lm", "Call");
- // Get afm application installed dir
- char const *afm_app_install_dir = getenv("AFM_APP_INSTALL_DIR");
- HMI_DEBUG("wm:lm", "afm_app_install_dir:%s", afm_app_install_dir);
-
- std::string file_name;
- if (!afm_app_install_dir)
- {
- HMI_ERROR("wm:lm", "AFM_APP_INSTALL_DIR is not defined");
- }
- else
- {
- file_name = std::string(afm_app_install_dir) + std::string("/etc/areas.db");
- }
+ std::string file_name(get_file_path("areas.db"));
// Load area.db
json_object *json_obj;
diff --git a/src/util.cpp b/src/util.cpp
index 672b089..e4cc2ef 100644
--- a/src/util.cpp
+++ b/src/util.cpp
@@ -1,5 +1,6 @@
/*
* Copyright (c) 2017 TOYOTA MOTOR CORPORATION
+ * Copyright (c) 2018 Konsulko Group
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -21,9 +22,12 @@
#include <cstdio>
#include <cstdlib>
#include <ctime>
+#include <fstream>
#include <unistd.h>
+#include "hmi-debug.h"
+
#ifdef SCOPE_TRACING
thread_local int ScopeTrace::indent = 0;
ScopeTrace::ScopeTrace(char const *func) : f(func)
@@ -93,3 +97,36 @@ void rectangle::set_aspect(double ratio)
}
}
+std::string get_file_path(const char *file_name, const char *log_category)
+{
+ char const *default_base_path = getenv("AFM_APP_INSTALL_DIR");
+ std::string path("");
+
+ if(!file_name) {
+ return path;
+ }
+
+ if (!default_base_path)
+ {
+ HMI_ERROR(log_category, "AFM_APP_INSTALL_DIR is not defined");
+ }
+ else
+ {
+ path = default_base_path;
+ path.append("/etc/");
+ path.append(file_name);
+ }
+
+ // Check for over-ride in /etc/xdg/windowmanager
+ std::string override_path("/etc/xdg/windowmanager/");
+ override_path.append(file_name);
+ std::ifstream i(override_path);
+ if (i.good())
+ {
+ path = override_path;
+ }
+ i.close();
+
+ HMI_INFO(log_category, "Using %s", path.c_str());
+ return path;
+}
diff --git a/src/util.hpp b/src/util.hpp
index 2f17845..8782353 100644
--- a/src/util.hpp
+++ b/src/util.hpp
@@ -1,5 +1,6 @@
/*
* Copyright (c) 2017 TOYOTA MOTOR CORPORATION
+ * Copyright (c) 2018 Konsulko Group
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -20,16 +21,10 @@
#include <functional>
#include <thread>
#include <vector>
+#include <string>
#include <sys/poll.h>
-#ifndef DO_NOT_USE_AFB
-extern "C"
-{
-#include <afb/afb-binding.h>
-};
-#endif
-
#define CONCAT_(X, Y) X##Y
#define CONCAT(X, Y) CONCAT_(X, Y)
@@ -163,4 +158,7 @@ class rectangle
long _bottom;
};
+// Configuration file path helper
+std::string get_file_path(const char *file_name, const char *log_category = "wm");
+
#endif // !WM_UTIL_HPP
diff --git a/src/window_manager.cpp b/src/window_manager.cpp
index 42930dc..e9cc53a 100644
--- a/src/window_manager.cpp
+++ b/src/window_manager.cpp
@@ -1,5 +1,6 @@
/*
* Copyright (c) 2017 TOYOTA MOTOR CORPORATION
+ * Copyright (c) 2018 Konsulko Group
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -19,6 +20,7 @@
#include "window_manager.hpp"
#include "json_helper.hpp"
+#include "util.hpp"
#include "applist.hpp"
extern "C"
@@ -123,17 +125,7 @@ WindowManager::WindowManager(wl::display *d)
id_alloc{},
pending_events(false)
{
- char const *path_layers_json = getenv("AFM_APP_INSTALL_DIR");
- std::string path;
- if (!path_layers_json)
- {
- HMI_ERROR("wm", "AFM_APP_INSTALL_DIR is not defined");
- path = std::string(path_layers_json);
- }
- else
- {
- path = std::string(path_layers_json) + std::string("/etc/layers.json");
- }
+ std::string path(get_file_path("layers.json"));
try
{
@@ -1371,19 +1363,7 @@ const char* WindowManager::convertRoleOldToNew(char const *old_role)
int WindowManager::loadOldRoleDb()
{
- // Get afm application installed dir
- char const *afm_app_install_dir = getenv("AFM_APP_INSTALL_DIR");
- HMI_DEBUG("wm", "afm_app_install_dir:%s", afm_app_install_dir);
-
- std::string file_name;
- if (!afm_app_install_dir)
- {
- HMI_ERROR("wm", "AFM_APP_INSTALL_DIR is not defined");
- }
- else
- {
- file_name = std::string(afm_app_install_dir) + std::string("/etc/old_roles.db");
- }
+ std::string file_name(get_file_path("old_roles.db"));
// Load old_role.db
json_object* json_obj;
diff --git a/src/window_manager.hpp b/src/window_manager.hpp
index 6cbd355..967a87a 100644
--- a/src/window_manager.hpp
+++ b/src/window_manager.hpp
@@ -1,5 +1,6 @@
/*
* Copyright (c) 2017 TOYOTA MOTOR CORPORATION
+ * Copyright (c) 2018 Konsulko Group
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -29,6 +30,10 @@
#include "hmi-debug.h"
#include "request.hpp"
#include "wm_error.hpp"
+extern "C"
+{
+#include <afb/afb-binding.h>
+}
struct json_object;