#include <Edje.h>
#include <Eina.h>
+#include <system_settings.h>
+
#include <dlog.h>
#include <bundle.h>
#include <heap-monitor.h>
#include "so_handler.h"
#include "lb.h"
-/*!
- * \NOTE
- * Undocumented API
- */
-extern void evas_common_font_flush(void);
-extern int evas_common_font_cache_get(void);
-extern void evas_common_font_cache_set(int size);
-
#define TEXT_CLASS "tizen"
#define TEXT_SIZE -100
+#if !defined(VCONFKEY_SETAPPL_ACCESSIBILITY_FONT_NAME)
+#define VCONFKEY_SETAPPL_ACCESSIBILITY_FONT_NAME "db/setting/accessibility/font_name"
+#endif
+
+#if !defined(VCONFKEY_SETAPPL_ACCESSIBILITY_FONT_SIZE)
+#define VCONFKEY_SETAPPL_ACCESSIBILITY_FONT_SIZE "db/setting/accessibility/font_size"
+#endif
+
static struct info {
Ecore_Event_Handler *property_handler;
int heap_monitor;
+ char *font_name;
+ int font_size;
} s_info = {
.property_handler = NULL,
.heap_monitor = 0,
+ .font_name = NULL,
+ .font_size = 3,
};
-static Eina_Bool update_font_cb(void *data)
+static void update_font_cb(void *data)
{
+ Eina_List *list;
+ char *text;
+
+ list = edje_text_class_list();
+ EINA_LIST_FREE(list, text) {
+ if (!strncasecmp(text, TEXT_CLASS, strlen(TEXT_CLASS))) {
+ int size;
+ switch (s_info.font_size) {
+ case SYSTEM_SETTINGS_FONT_SIZE_SMALL:
+ size = -80;
+ break;
+ case SYSTEM_SETTINGS_FONT_SIZE_NORMAL:
+ size = -100;
+ break;
+ case SYSTEM_SETTINGS_FONT_SIZE_LARGE:
+ size = -150;
+ break;
+ case SYSTEM_SETTINGS_FONT_SIZE_HUGE:
+ size = -190;
+ break;
+ case SYSTEM_SETTINGS_FONT_SIZE_GIANT:
+ size = -250;
+ break;
+ default:
+ size = -100;
+ break;
+ }
+
+ DbgPrint("Update text class %s (%s, %d)\n", text, s_info.font_name, size);
+ edje_text_class_del(text);
+ edje_text_class_set(text, s_info.font_name, size);
+ } else {
+ DbgPrint("Skip text class %s\n", text);
+ }
+ }
+
lb_system_event_all(LB_SYS_EVENT_FONT_CHANGED);
- return ECORE_CALLBACK_CANCEL;
}
-static Eina_Bool property_cb(void *data, int type, void *event)
+static void font_changed_cb(system_settings_key_e key, void *user_data)
{
- Ecore_X_Event_Window_Property *info = (Ecore_X_Event_Window_Property *)event;
-
- if (info->atom == ecore_x_atom_get("FONT_TYPE_change") || info->atom == ecore_x_atom_get("BADA_FONT_change")) {
- Eina_List *list;
- char *text;
- char *font;
- int cache;
-
- font = vconf_get_str("db/setting/accessibility/font_name");
- if (!font)
- return ECORE_CALLBACK_PASS_ON;
-
- cache = evas_common_font_cache_get();
- evas_common_font_cache_set(0);
- evas_common_font_flush();
-
- list = edje_text_class_list();
- EINA_LIST_FREE(list, text) {
- if (!strncasecmp(text, TEXT_CLASS, strlen(TEXT_CLASS))) {
- edje_text_class_del(text);
- edje_text_class_set(text, font, TEXT_SIZE);
- DbgPrint("Update text class %s (%s, %d)\n", text, font, TEXT_SIZE);
- } else {
- DbgPrint("Skip text class %s\n", text);
- }
- }
+ int ret;
+ char *font_name;
- evas_common_font_cache_set(cache);
- free(font);
+ ret = system_settings_get_value_string(SYSTEM_SETTINGS_KEY_FONT_TYPE, &font_name);
+ if (ret != SYSTEM_SETTINGS_ERROR_NONE || !font_name)
+ return;
- /*!
- * \NOTE
- * Try to update all liveboxes
- */
- if (!ecore_timer_add(0.1f, update_font_cb, NULL)) {
- ErrPrint("Failed to add timer for updating fonts\n");
- lb_system_event_all(LB_SYS_EVENT_FONT_CHANGED);
- }
+ if (s_info.font_name && !strcmp(s_info.font_name, font_name)) {
+ DbgPrint("Font is not changed\n");
+ free(font_name);
+ return;
+ }
+
+ if (s_info.font_name) {
+ free(s_info.font_name);
+ s_info.font_name = NULL;
}
- return ECORE_CALLBACK_PASS_ON;
+ s_info.font_name = font_name;
+ DbgPrint("Font name is changed to %s\n", s_info.font_name);
+
+ /*!
+ * \NOTE
+ * Try to update all liveboxes
+ */
+ update_font_cb(NULL);
+}
+
+static void font_size_cb(system_settings_key_e key, void *user_data)
+{
+ int size;
+
+ if (system_settings_get_value_int(SYSTEM_SETTINGS_KEY_FONT_SIZE, &size) != SYSTEM_SETTINGS_ERROR_NONE)
+ return;
+
+ if (size == s_info.font_size) {
+ DbgPrint("Font size is not changed\n");
+ return;
+ }
+
+ s_info.font_size = size;
+ DbgPrint("Font size is changed to %d\n", size);
+
+ update_font_cb(NULL);
+}
+
+static void mmc_changed_cb(keynode_t *node, void *user_data)
+{
+ DbgPrint("MMC status is changed\n");
+ lb_system_event_all(LB_SYS_EVENT_MMC_STATUS_CHANGED);
}
static void time_changed_cb(keynode_t *node, void *user_data)
else
setenv("PROVIDER_COM_CORE_THREAD", "false", 0);
- s_info.property_handler = ecore_event_handler_add(ECORE_X_EVENT_WINDOW_PROPERTY, property_cb, NULL);
- if (!s_info.property_handler)
- ErrPrint("Failed to add a property change event handler\n");
-
ret = livebox_service_init();
DbgPrint("Livebox service init: %d\n", ret);
ret = update_monitor_init();
DbgPrint("Content update monitor is initiated: %d\n", ret);
+ ret = system_settings_set_changed_cb(SYSTEM_SETTINGS_KEY_FONT_TYPE, font_changed_cb, NULL);
+ DbgPrint("System font is changed: %d\n", ret);
+
+ ret = system_settings_set_changed_cb(SYSTEM_SETTINGS_KEY_FONT_SIZE, font_size_cb, NULL);
+ DbgPrint("System font size is changed: %d\n", ret);
+
ret = vconf_notify_key_changed(VCONFKEY_SYSMAN_STIME, time_changed_cb, NULL);
- DbgPrint("System time event callback added: %d\n", ret);
+ DbgPrint("System time changed event callback added: %d\n", ret);
+
+ ret = vconf_notify_key_changed(VCONFKEY_SYSMAN_MMC_STATUS, mmc_changed_cb, NULL);
+ DbgPrint("MMC status changed event callback added: %d\n", ret);
+
+ ret = system_settings_get_value_string(SYSTEM_SETTINGS_KEY_FONT_TYPE, &s_info.font_name);
+ if (ret == SYSTEM_SETTINGS_ERROR_NONE)
+ DbgPrint("Current font: %s\n", s_info.font_name);
+
+ ret = system_settings_get_value_int(SYSTEM_SETTINGS_KEY_FONT_SIZE, &s_info.font_size);
+ if (ret == SYSTEM_SETTINGS_ERROR_NONE)
+ DbgPrint("Current size: %d\n", s_info.font_size);
return TRUE;
}
{
int ret;
+ ret = system_settings_unset_changed_cb(SYSTEM_SETTINGS_KEY_FONT_SIZE);
+ ret = system_settings_unset_changed_cb(SYSTEM_SETTINGS_KEY_FONT_TYPE);
+
+ ret = vconf_ignore_key_changed(VCONFKEY_SYSMAN_STIME, time_changed_cb);
+ DbgPrint("Remove time changed callback: %d\n", ret);
+
+ ret = vconf_ignore_key_changed(VCONFKEY_SYSMAN_MMC_STATUS, mmc_changed_cb);
+ DbgPrint("Remove MMC status changed callback: %d\n", ret);
+
ret = update_monitor_fini();
DbgPrint("Content update monitor is finalized: %d\n", ret);
ret = fault_fini();