#include <string.h>
#include <sys/types.h>
#include <sys/stat.h>
+#include <sys/un.h>
+#include <sys/socket.h>
+#include <systemd/sd-login.h>
#include <fcntl.h>
+#define EFL_CONFIG_SOCK_PATH "/run/user_ext/%d"
+#define EFL_CONFIG_SOCKET_FILE ".efl-config.sock"
+
#include <regex.h>
#include <dlog.h>
return __get_main_font_family_name_by_alias(SETTING_FONT_TIZEN_DEFAULT_FONT_ALIAS);
}
-/* LCOV_EXCL_START */
-bool font_config_set(char *font_name)
+bool _is_in_system_session()
{
SETTING_TRACE_BEGIN;
- Eina_List *text_classes = NULL;
- Elm_Text_Class *etc = NULL;
- const Eina_List *l = NULL;
- Eina_List *fo_list = NULL;
- Elm_Font_Overlay *efo = NULL;
+ int ret = 0;
+ char *slice = NULL;
- int font_size = __font_size_get();
- int size = 0;
-
- text_classes = elm_config_text_classes_list_get();
-
- fo_list = (Eina_List *)elm_config_font_overlay_list_get();
-
- Eina_List *ll = NULL;
- Eina_List *l_next = NULL;
-
- Eina_Bool slp_medium_exist = EINA_FALSE;
- Eina_Bool slp_roman_exist = EINA_FALSE;
- Eina_Bool slp_bold_exist = EINA_FALSE;
- Eina_Bool slp_regular_exist = EINA_FALSE;
-
- /* Tizen */
- Eina_Bool tizen_exist = EINA_FALSE;
-
- EINA_LIST_FOREACH_SAFE(fo_list, ll, l_next, efo) {
- if (!strcmp(efo->text_class, "tizen_medium")) {
- elm_config_font_overlay_set(efo->text_class, (const char *)font_name, efo->size);
- slp_medium_exist = EINA_TRUE;
- } else if (!strcmp(efo->text_class, "tizen_roman")) {
- elm_config_font_overlay_set(efo->text_class, (const char *)font_name, efo->size);
- slp_roman_exist = EINA_TRUE;
- } else if (!strcmp(efo->text_class, "tizen_bold")) {
- elm_config_font_overlay_set(efo->text_class, (const char *)font_name, efo->size);
- slp_bold_exist = EINA_TRUE;
- } else if (!strcmp(efo->text_class, "tizen_regular")) {
- elm_config_font_overlay_set(efo->text_class, (const char *)font_name, efo->size);
- slp_regular_exist = EINA_TRUE;
+ ret = sd_pid_get_slice(getpid(), &slice);
+ if (0 <= ret && slice) {
+ if (0 == strncmp(slice, "system.slice", strlen("system.slice"))) {
+ free(slice);
+ return true;
}
+ } else {
+ SETTING_TRACE("sd_pid_get_slice() Fail(%d)", ret);
+ }
- /* Tizen */
- if (!strcmp(efo->text_class, "tizen")) {
- elm_config_font_overlay_set(efo->text_class, (const char *)font_name, efo->size);
- tizen_exist = EINA_TRUE;
- }
+ free(slice);
+ return false;
+}
+bool _get_active_uid(uid_t *uid)
+{
+ SETTING_TRACE_BEGIN;
+ int active_user_count = 0;
+ uid_t *active_user_list = NULL;
+
+ active_user_count = sd_get_active_uids(&active_user_list);
+ /* the number of active users is 1 in tizen3.0 */
+ if (1 == active_user_count && active_user_list) {
+ *uid = active_user_list[0];
+ SETTING_TRACE("active uid = %d", *uid);
+ } else {
+ SETTING_TRACE("sd_get_active_uids() Fail(%d)", active_user_count);
+ free(active_user_list);
+ return false;
}
- /* if slp_XX do not exist, need to set them, font size is -100(100%) */
- if (slp_medium_exist == EINA_FALSE) {
- elm_config_font_overlay_set("tizen_medium", (const char *)font_name, MIDDLE_FONT_DPI);
- }
- if (slp_roman_exist == EINA_FALSE) {
- elm_config_font_overlay_set("tizen_roman", (const char *)font_name, MIDDLE_FONT_DPI);
- }
- if (slp_bold_exist == EINA_FALSE) {
- elm_config_font_overlay_set("tizen_bold", (const char *)font_name, MIDDLE_FONT_DPI);
- }
- if (slp_regular_exist == EINA_FALSE) {
- elm_config_font_overlay_set("tizen_regular", (const char *)font_name, MIDDLE_FONT_DPI);
- }
+ return true;
+}
- /* Tizen */
- if (tizen_exist == EINA_FALSE) {
- elm_config_font_overlay_set("tizen", (const char *)font_name, MIDDLE_FONT_DPI);
+bool
+_efl_config_set(char *msg)
+{
+ SETTING_TRACE_BEGIN;
+ int fd;
+ char sock_file[1024] = {0};
+ uid_t active_uid = getuid();
+ bool ret = false;
+
+ if (_is_in_system_session() == true) {
+ if (_get_active_uid(&active_uid) == false) {
+ SETTING_TRACE("get active uid fail");
+ return ret;
+ }
}
- elm_config_font_overlay_set("tizen", (const char *)font_name, MIDDLE_FONT_DPI);
+ snprintf(sock_file, sizeof(sock_file), EFL_CONFIG_SOCK_PATH"/%s",
+ active_uid,
+ EFL_CONFIG_SOCKET_FILE);
- /* Tizen */
- elm_config_font_overlay_set("tizen", (const char *)font_name, MIDDLE_FONT_DPI);
+ do {
+ int r, size, flags;
+ struct sockaddr_un server_addr;
- EINA_LIST_FOREACH(text_classes, l, etc) {
- ll = NULL;
+ fd = socket(PF_UNIX, SOCK_STREAM, 0);
+ if (fd < 0) {
+ SETTING_TRACE("socket[%d] error :%d", fd, errno);
+ break;
+ }
- size = font_size;
- EINA_LIST_FOREACH(fo_list, ll, efo) {
- if (!strcmp(etc->name, efo->text_class)) {
- size = efo->size;
- }
+ flags = fcntl(fd, F_GETFL, 0);
+ if (flags == -1)
+ flags = 0;
+ r = fcntl(fd, F_SETFL, flags | O_NONBLOCK);
+ if (0 != r)
+ SETTING_TRACE("fcntl fail : %d", errno);
+
+ bzero(&server_addr, sizeof(server_addr));
+ server_addr.sun_family = AF_UNIX;
+ snprintf(server_addr.sun_path, sizeof(server_addr.sun_path), "%s",
+ sock_file);
+
+ r = connect(fd, (struct sockaddr *)&server_addr, sizeof(server_addr));
+ if (r != 0) {
+ SETTING_TRACE("connect error : %d, %d", r, errno);
+ break;
}
- elm_config_font_overlay_set(etc->name, (const char *)font_name, size);
- }
- elm_config_text_classes_list_free(text_classes);
- text_classes = NULL;
- /* add new function */
-#ifdef USE_EFL_ASSIST
- ea_theme_system_font_set(font_name, font_size);
- ea_theme_system_fonts_apply();
-#endif
+ size = write(fd, msg, strlen(msg));
+ if (size <= 0) {
+ SETTING_TRACE("write fail : %d", errno);
+ } else {
+ ret = true;
+ }
+ } while (0);
- elm_config_font_overlay_apply();
- elm_config_all_flush();
- elm_config_save();
- return 1;
+ return ret;
}
-/* LCOV_EXCL_STOP */
/* LCOV_EXCL_START */
-void __font_size_set()
+bool font_config_set(char *font_name)
{
SETTING_TRACE_BEGIN;
- Eina_List *text_classes = NULL;
- Elm_Text_Class *etc = NULL;
- const Eina_List *l = NULL;
+ char buf[255] = { 0 };
int font_size = __font_size_get();
- char *font_name = _get_cur_font();
-
- if (font_size == -1) {
- return;
- }
-
- text_classes = elm_config_text_classes_list_get();
+ bool ret;
- EINA_LIST_FOREACH(text_classes, l, etc) {
- elm_config_font_overlay_set(etc->name, font_name, font_size);
- }
+ snprintf(buf, sizeof(buf), "font_name: %s, font_size: %d", font_name, font_size);
+ ret = _efl_config_set(buf);
- elm_config_text_classes_list_free(text_classes);
+ return ret;
+}
+/* LCOV_EXCL_STOP */
-#ifdef USE_EFL_ASSIST
- ea_theme_system_font_set(font_name, font_size);
- ea_theme_system_fonts_apply();
-#endif
+/* LCOV_EXCL_START */
+void __font_size_set()
+{
+ SETTING_TRACE_BEGIN;
+ char buf[255] = { 0 };
+ int font_size = __font_size_get();
+ char *font_name = _get_cur_font();
- elm_config_font_overlay_apply();
- elm_config_all_flush();
- elm_config_save();
+ snprintf(buf, sizeof(buf), "font_name: %s, font_size: %d", font_name, font_size);
+ _efl_config_set(buf);
- text_classes = NULL;
g_free(font_name);
}
/* LCOV_EXCL_STOP */