X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=src%2Flib%2Felm_config.c;h=b5895aaf3ad4feae873bb5dd91e9e9063d082dc0;hb=ef5382265f028057fba06442e1359eb37299a9a3;hp=605baa77cc5549fb74e6b9745374b9319499c1f1;hpb=694ab5c86c20edc63452951eaadf2d5be8023b0f;p=framework%2Fuifw%2Felementary.git diff --git a/src/lib/elm_config.c b/src/lib/elm_config.c index 605baa7..b5895aa 100644 --- a/src/lib/elm_config.c +++ b/src/lib/elm_config.c @@ -9,11 +9,15 @@ #include #include "elm_priv.h" +EAPI int ELM_EVENT_CONFIG_ALL_CHANGED = 0; Elm_Config *_elm_config = NULL; char *_elm_profile = NULL; static Eet_Data_Descriptor *_config_edd = NULL; static Eet_Data_Descriptor *_config_font_overlay_edd = NULL; +static Eet_Data_Descriptor *_config_color_edd = NULL; +static Eet_Data_Descriptor *_config_color_palette_edd = NULL; +const char *_elm_preferred_engine = NULL; static Ecore_Poller *_elm_cache_flush_poller = NULL; @@ -34,6 +38,8 @@ const char *_elm_engines[] = { "ews", "opengl_cocoa", "psl1ght", + "wayland_shm", + "wayland_egl", NULL }; @@ -77,66 +83,38 @@ static size_t _elm_user_dir_snprintf(char *dst, #ifdef HAVE_ELEMENTARY_X static Ecore_Event_Handler *_prop_change_handler = NULL; +static Ecore_Timer *_prop_all_update_timer = NULL; +static Ecore_Timer *_prop_change_delay_timer = NULL; static Ecore_X_Window _root_1st = 0; -#define ATOM_COUNT 23 +#define ATOM_COUNT 2 static Ecore_X_Atom _atom[ATOM_COUNT]; static Ecore_X_Atom _atom_config = 0; static const char *_atom_names[ATOM_COUNT] = { - "ENLIGHTENMENT_SCALE", - "ENLIGHTENMENT_FINGER_SIZE", - "ENLIGHTENMENT_THEME", - "ENLIGHTENMENT_PROFILE", - "ENLIGHTENMENT_FONT_OVERLAY", - "ENLIGHTENMENT_CACHE_FLUSH_INTERVAL", - "ENLIGHTENMENT_CACHE_FLUSH_ENABLE", - "ENLIGHTENMENT_FONT_CACHE", - "ENLIGHTENMENT_IMAGE_CACHE", - "ENLIGHTENMENT_EDJE_FILE_CACHE", - "ENLIGHTENMENT_EDJE_COLLECTION_CACHE", - "ENLIGHTENMENT_THUMBSCROLL_BOUNCE_ENABLE", - "ENLIGHTENMENT_THUMBSCROLL_BOUNCE_FRICTION", - "ENLIGHTENMENT_THUMBSCROLL_ENABLE", - "ENLIGHTENMENT_THUMBSCROLL_THRESHOLD", - "ENLIGHTENMENT_THUMBSCROLL_MOMENTUM_THRESHOLD", - "ENLIGHTENMENT_THUMBSCROLL_FRICTION", - "ENLIGHTENMENT_THUMBSCROLL_BORDER_FRICTION", - "ENLIGHTENMENT_THUMBSCROLL_SENSITIVITY_FRICTION", - "ENLIGHTENMENT_THUMBSCROLL_PAGE_SCROLL_FRICTION", - "ENLIGHTENMENT_THUMBSCROLL_BRING_IN_SCROLL_FRICTION", - "ENLIGHTENMENT_THUMBSCROLL_ZOOM_FRICTION", - "ENLIGHTENMENT_CONFIG" + "ELM_PROFILE", + "ELM_CONFIG" }; -#define ATOM_E_SCALE 0 -#define ATOM_E_FINGER_SIZE 1 -#define ATOM_E_THEME 2 -#define ATOM_E_PROFILE 3 -#define ATOM_E_FONT_OVERLAY 4 -#define ATOM_E_CACHE_FLUSH_INTERVAL 5 -#define ATOM_E_CACHE_FLUSH_ENABLE 6 -#define ATOM_E_FONT_CACHE 7 -#define ATOM_E_IMAGE_CACHE 8 -#define ATOM_E_EDJE_FILE_CACHE 9 -#define ATOM_E_EDJE_COLLECTION_CACHE 10 -#define ATOM_E_THUMBSCROLL_BOUNCE_ENABLE 11 -#define ATOM_E_THUMBSCROLL_BOUNCE_FRICTION 12 -#define ATOM_E_THUMBSCROLL_ENABLE 13 -#define ATOM_E_THUMBSCROLL_THRESHOLD 14 -#define ATOM_E_THUMBSCROLL_MOMENTUM_THRESHOLD 15 -#define ATOM_E_THUMBSCROLL_FRICTION 16 -#define ATOM_E_THUMBSCROLL_BORDER_FRICTION 17 -#define ATOM_E_THUMBSCROLL_SENSITIVITY_FRICTION 18 -#define ATOM_E_THUMBSCROLL_PAGE_SCROLL_FRICTION 19 -#define ATOM_E_THUMBSCROLL_BRING_IN_SCROLL_FRICTION 20 -#define ATOM_E_THUMBSCROLL_ZOOM_FRICTION 21 -#define ATOM_E_CONFIG 22 +#define ATOM_E_PROFILE 0 +#define ATOM_E_CONFIG 1 +static Eina_Bool _prop_all_update_cb(void *data __UNUSED__); static Eina_Bool _prop_config_get(void); +static void _prop_config_set(void); static Eina_Bool _prop_change(void *data __UNUSED__, int ev_type __UNUSED__, void *ev); static Eina_Bool +_prop_all_update_cb(void *data __UNUSED__) +{ + _prop_config_set(); + ecore_x_window_prop_string_set(_root_1st, _atom[ATOM_E_PROFILE], + _elm_profile); + _prop_all_update_timer = NULL; + return EINA_FALSE; +} + +static Eina_Bool _prop_config_get(void) { int size = 0; @@ -145,7 +123,7 @@ _prop_config_get(void) unsigned char *data = NULL; Elm_Config *config_data; - snprintf(buf, sizeof(buf), "ENLIGHTENMENT_CONFIG_%s", _elm_profile); + snprintf(buf, sizeof(buf), "ELM_CONFIG_%s", _elm_profile); atom = ecore_x_atom_get(buf); _atom_config = atom; if (!ecore_x_window_prop_property_get(_root_1st, @@ -186,343 +164,68 @@ _prop_config_get(void) _elm_config_font_overlay_apply(); _elm_rescale(); _elm_recache(); + ecore_event_add(ELM_EVENT_CONFIG_ALL_CHANGED, NULL, NULL, NULL); return EINA_TRUE; } -static Eina_Bool -_prop_change(void *data __UNUSED__, - int ev_type __UNUSED__, - void *ev) +static void +_prop_config_set(void) { - Ecore_X_Event_Window_Property *event = ev; + unsigned char *config_data = NULL; + int size = 0; - if (event->win == _root_1st) + config_data = eet_data_descriptor_encode(_config_edd, _elm_config, &size); + if (config_data) { - if (event->atom == _atom[ATOM_E_SCALE]) - { - unsigned int val = 1000; - - if (ecore_x_window_prop_card32_get(event->win, - event->atom, - &val, 1) > 0) - { - double pscale; - - pscale = _elm_config->scale; - if (val > 0) _elm_config->scale = (double)val / 1000.0; - if (pscale != _elm_config->scale) - { - _elm_rescale(); - _elm_recache(); - } - } - } - else if (event->atom == _atom[ATOM_E_FINGER_SIZE]) - { - unsigned int val = 1000; - - if (ecore_x_window_prop_card32_get(event->win, - event->atom, - &val, 1) > 0) - { - int pfinger_size; - - pfinger_size = _elm_config->finger_size; - _elm_config->finger_size = val; - if (pfinger_size != _elm_config->finger_size) - { - _elm_rescale(); - _elm_recache(); - } - } - } - else if (event->atom == _atom[ATOM_E_THEME]) - { - char *val = NULL; - - val = ecore_x_window_prop_string_get(event->win, - event->atom); - eina_stringshare_replace(&_elm_config->theme, val); - if (val) - { - _elm_theme_parse(NULL, val); - free(val); - _elm_rescale(); - _elm_recache(); - } - } - else if (event->atom == _atom[ATOM_E_PROFILE]) - { - char *val = NULL; - - val = ecore_x_window_prop_string_get(event->win, - event->atom); - if (val) - { - int changed = 0; - - if (_elm_profile) - { - if (strcmp(_elm_profile, val)) changed = 1; - free(_elm_profile); - } - _elm_profile = val; - if (changed) - { - if (!_prop_config_get()) - { - _config_free(); - _config_load(); - _config_apply(); - _elm_config_font_overlay_apply(); - _elm_rescale(); - } - } - } - } - else if (event->atom == _atom[ATOM_E_FONT_OVERLAY]) - { - unsigned int val = 1000; - - if (ecore_x_window_prop_card32_get(event->win, - event->atom, - &val, 1) > 0) - { - _config_free(); - _config_load(); - _config_apply(); - _elm_config_font_overlay_apply(); - _elm_rescale(); - } - } - else if (event->atom == _atom[ATOM_E_CACHE_FLUSH_INTERVAL]) - { - unsigned int val = 1000; - - if (ecore_x_window_prop_card32_get(event->win, - event->atom, - &val, 1) > 0) - { - int cache_flush_interval; - - cache_flush_interval = _elm_config->cache_flush_poll_interval; - _elm_config->cache_flush_poll_interval = val; - if (cache_flush_interval != - _elm_config->cache_flush_poll_interval) - _elm_recache(); - } - } - else if (event->atom == _atom[ATOM_E_CACHE_FLUSH_ENABLE]) - { - unsigned int val = 1000; - - if (ecore_x_window_prop_card32_get(event->win, - event->atom, - &val, 1) > 0) - { - _elm_config->cache_flush_enable = !!val; - _elm_recache(); - } - } - else if (event->atom == _atom[ATOM_E_FONT_CACHE]) - { - unsigned int val = 1000; + Ecore_X_Atom atom; + char buf[512]; - if (ecore_x_window_prop_card32_get(event->win, - event->atom, - &val, 1) > 0) - { - int font_cache; - - font_cache = _elm_config->font_cache; - _elm_config->font_cache = val; - if (font_cache != _elm_config->font_cache) - _elm_recache(); - } - } - else if (event->atom == _atom[ATOM_E_IMAGE_CACHE]) - { - unsigned int val = 1000; - - if (ecore_x_window_prop_card32_get(event->win, - event->atom, - &val, 1) > 0) - { - int image_cache; - - image_cache = _elm_config->image_cache; - _elm_config->image_cache = val; - if (image_cache != _elm_config->image_cache) - _elm_recache(); - } - } - else if (event->atom == _atom[ATOM_E_EDJE_FILE_CACHE]) - { - unsigned int val = 1000; - - if (ecore_x_window_prop_card32_get(event->win, - event->atom, - &val, 1) > 0) - { - int edje_file_cache; - - edje_file_cache = _elm_config->edje_cache; - _elm_config->edje_cache = val; - if (edje_file_cache != _elm_config->edje_cache) - _elm_recache(); - } - } - else if (event->atom == _atom[ATOM_E_EDJE_COLLECTION_CACHE]) - { - unsigned int val = 1000; - - if (ecore_x_window_prop_card32_get(event->win, - event->atom, - &val, 1) > 0) - { - int edje_collection_cache; - - edje_collection_cache = _elm_config->edje_collection_cache; - _elm_config->edje_collection_cache = val; - if (edje_collection_cache != - _elm_config->edje_collection_cache) - _elm_recache(); - } - } - else if (event->atom == _atom[ATOM_E_THUMBSCROLL_BOUNCE_ENABLE]) - { - unsigned int val = 1000; - - if (ecore_x_window_prop_card32_get(event->win, - event->atom, - &val, 1) > 0) - { - _elm_config->thumbscroll_bounce_enable = !!val; - } - } - else if (event->atom == _atom[ATOM_E_THUMBSCROLL_BOUNCE_FRICTION]) - { - unsigned int val = 1000; - - if (ecore_x_window_prop_card32_get(event->win, - event->atom, - &val, 1) > 0) - { - if (val > 0) - _elm_config->thumbscroll_bounce_friction = - (double)val / 1000.0; - } - } - else if (event->atom == _atom[ATOM_E_THUMBSCROLL_ENABLE]) - { - unsigned int val = 1000; - - if (ecore_x_window_prop_card32_get(event->win, - event->atom, - &val, 1) > 0) - { - _elm_config->thumbscroll_enable = !!val; - } - } - else if (event->atom == _atom[ATOM_E_THUMBSCROLL_THRESHOLD]) - { - unsigned int val = 1000; - - if (ecore_x_window_prop_card32_get(event->win, - event->atom, - &val, 1) > 0) - { - if (val > 0) _elm_config->thumbscroll_threshold = val; - } - } - else if (event->atom == _atom[ATOM_E_THUMBSCROLL_MOMENTUM_THRESHOLD]) - { - unsigned int val = 1000; - - if (ecore_x_window_prop_card32_get(event->win, - event->atom, - &val, 1) > 0) - { - _elm_config->thumbscroll_momentum_threshold = - (double)val / 1000.0; - } - } - else if (event->atom == _atom[ATOM_E_THUMBSCROLL_FRICTION]) - { - unsigned int val = 1000; + snprintf(buf, sizeof(buf), "ELM_CONFIG_%s", _elm_profile); + atom = ecore_x_atom_get(buf); + _atom_config = atom; - if (ecore_x_window_prop_card32_get(event->win, - event->atom, - &val, 1) > 0) - { - _elm_config->thumbscroll_friction = (double)val / 1000.0; - } - } - else if (event->atom == _atom[ATOM_E_THUMBSCROLL_BORDER_FRICTION]) - { - unsigned int val = 1000; + ecore_x_window_prop_property_set(_root_1st, _atom_config, + _atom[ATOM_E_CONFIG], 8, + config_data, size); + free(config_data); + } +} - if (ecore_x_window_prop_card32_get(event->win, - event->atom, - &val, 1) > 0) - { - _elm_config->thumbscroll_border_friction = - (double)val / 1000.0; - } - } - else if (event->atom == _atom[ATOM_E_THUMBSCROLL_SENSITIVITY_FRICTION]) - { - unsigned int val = 1000; +static Eina_Bool +_prop_change_delay_cb(void *data __UNUSED__) +{ + char *s; - if (ecore_x_window_prop_card32_get(event->win, - event->atom, - &val, 1) > 0) - { - _elm_config->thumbscroll_sensitivity_friction = - (double)val / 1000.0; - } - } - else if (event->atom == _atom[ATOM_E_THUMBSCROLL_PAGE_SCROLL_FRICTION]) - { - unsigned int val = 1000; + s = ecore_x_window_prop_string_get(_root_1st, _atom[ATOM_E_PROFILE]); + if (s) + { + if (_elm_profile) free(_elm_profile); + _elm_profile = s; + } + _prop_config_get(); + _prop_change_delay_timer = NULL; + return EINA_FALSE; +} - if (ecore_x_window_prop_card32_get(event->win, - event->atom, - &val, 1) > 0) - { - _elm_config->page_scroll_friction = - (double)val / 1000.0; - } - } - else if (event->atom == - _atom[ATOM_E_THUMBSCROLL_BRING_IN_SCROLL_FRICTION]) - { - unsigned int val = 1000; +static Eina_Bool +_prop_change(void *data __UNUSED__, + int ev_type __UNUSED__, + void *ev) +{ + Ecore_X_Event_Window_Property *event = ev; - if (ecore_x_window_prop_card32_get(event->win, - event->atom, - &val, 1) > 0) - { - _elm_config->bring_in_scroll_friction = - (double)val / 1000.0; - } - } - else if (event->atom == - _atom[ATOM_E_THUMBSCROLL_ZOOM_FRICTION]) + if (event->win == _root_1st) + { + if (event->atom == _atom[ATOM_E_PROFILE]) { - unsigned int val = 1000; - - if (ecore_x_window_prop_card32_get(event->win, - event->atom, - &val, 1) > 0) - { - _elm_config->zoom_friction = (double)val / 1000.0; - } + if (_prop_change_delay_timer) ecore_timer_del(_prop_change_delay_timer); + _prop_change_delay_timer = ecore_timer_add(0.1, _prop_change_delay_cb, NULL); } else if (((_atom_config > 0) && (event->atom == _atom_config)) || (event->atom == _atom[ATOM_E_CONFIG])) { - _prop_config_get(); + if (_prop_change_delay_timer) ecore_timer_del(_prop_change_delay_timer); + _prop_change_delay_timer = ecore_timer_add(0.1, _prop_change_delay_cb, NULL); } } return ECORE_CALLBACK_PASS_ON; @@ -558,6 +261,33 @@ _desc_init(void) eet_data_descriptor_free(_config_edd); return; } + + memset(&eddc, 0, sizeof(eddc)); /* just in case... */ + EET_EINA_STREAM_DATA_DESCRIPTOR_CLASS_SET(&eddc, Elm_Color_RGBA); + eddc.func.str_direct_alloc = NULL; + eddc.func.str_direct_free = NULL; + + _config_color_edd = eet_data_descriptor_stream_new(&eddc); + if (!_config_color_edd) + { + printf("EEEK! eet_data_descriptor_stream_new() failed\n"); + eet_data_descriptor_free(_config_edd); + return; + } + + memset(&eddc, 0, sizeof(eddc)); /* just in case... */ + EET_EINA_STREAM_DATA_DESCRIPTOR_CLASS_SET(&eddc, Elm_Custom_Palette); + eddc.func.str_direct_alloc = NULL; + eddc.func.str_direct_free = NULL; + + _config_color_palette_edd = eet_data_descriptor_stream_new(&eddc); + if (!_config_color_palette_edd) + { + printf("EEEK! eet_data_descriptor_stream_new() failed\n"); + eet_data_descriptor_free(_config_edd); + return; + } + #define T_INT EET_T_INT #define T_DOUBLE EET_T_DOUBLE #define T_STRING EET_T_STRING @@ -571,6 +301,22 @@ _desc_init(void) #undef T #undef D +#define T Elm_Color_RGBA +#define D _config_color_edd + ELM_CONFIG_VAL(D, T, r, EET_T_UINT); + ELM_CONFIG_VAL(D, T, g, EET_T_UINT); + ELM_CONFIG_VAL(D, T, b, EET_T_UINT); + ELM_CONFIG_VAL(D, T, a, EET_T_UINT); +#undef T +#undef D + +#define T Elm_Custom_Palette +#define D _config_color_palette_edd + ELM_CONFIG_VAL(D, T, palette_name, EET_T_STRING); + ELM_CONFIG_LIST(D, T, color_list, _config_color_edd); +#undef T +#undef D + #define T Elm_Config #define D _config_edd ELM_CONFIG_VAL(D, T, config_version, T_INT); @@ -634,6 +380,10 @@ _desc_init(void) ELM_CONFIG_VAL(D, T, glayer_long_tap_start_timeout, T_DOUBLE); ELM_CONFIG_VAL(D, T, access_mode, T_INT); ELM_CONFIG_VAL(D, T, glayer_continues_enable, T_UCHAR); + ELM_CONFIG_VAL(D, T, week_start, T_INT); + ELM_CONFIG_VAL(D, T, weekend_start, T_INT); + ELM_CONFIG_VAL(D, T, weekend_len, T_INT); + ELM_CONFIG_LIST(D, T, color_palette, _config_color_palette_edd); #undef T #undef D #undef T_INT @@ -656,6 +406,18 @@ _desc_shutdown(void) eet_data_descriptor_free(_config_font_overlay_edd); _config_font_overlay_edd = NULL; } + + if (_config_color_edd) + { + eet_data_descriptor_free(_config_color_edd); + _config_color_edd = NULL; + } + + if (_config_color_palette_edd) + { + eet_data_descriptor_free(_config_color_palette_edd); + _config_color_palette_edd = NULL; + } } static int @@ -715,7 +477,7 @@ _elm_user_dir_snprintf(char *dst, home = "/"; user_dir_len = eina_str_join_len(dst, size, '/', home, strlen(home), - ".elementary", sizeof(".elementary") - 1); + ELEMENTARY_BASE_DIR, sizeof(ELEMENTARY_BASE_DIR) - 1); off = user_dir_len + 1; if (off >= size) @@ -838,6 +600,7 @@ _elm_config_text_classes_get(void) { Elm_Text_Class *tc; tc = malloc(sizeof(*tc)); + if (!tc) continue; *tc = _elm_text_classes[i]; @@ -857,9 +620,66 @@ _elm_config_text_classes_free(Eina_List *l) } Eina_List * +_elm_config_color_list_get(const char *palette_name) +{ + Eina_List *plist; + Elm_Custom_Palette *cpalette; + EINA_LIST_FOREACH(_elm_config->color_palette, plist, cpalette) + { + if (strcmp(cpalette->palette_name, palette_name)) + continue; + return cpalette->color_list; + } + return NULL; +} + +void +_elm_config_color_set(const char *palette_name, + int r, + int g, + int b, + int a) +{ + Eina_List *plist; + Elm_Custom_Palette *cpalette; + Elm_Color_RGBA *color; + EINA_LIST_FOREACH(_elm_config->color_palette, plist, cpalette) + { + if (strcmp(cpalette->palette_name, palette_name)) + continue; + + color = calloc(1, sizeof(Elm_Color_RGBA)); + color->r = r; + color->g = g; + color->b = b; + color->a = a; + cpalette->color_list = eina_list_prepend(cpalette->color_list, + color); + } +} + +void +_elm_config_colors_free(const char *palette_name) +{ + Eina_List *plist; + Elm_Custom_Palette *cpalette; + Elm_Color_RGBA *color; + EINA_LIST_FOREACH(_elm_config->color_palette, plist, cpalette) + { + if (strcmp(cpalette->palette_name, palette_name)) + continue; + + EINA_LIST_FREE(cpalette->color_list, color) + { + free(color); + } + } +} + +Eina_List * _elm_config_profiles_list(void) { - const Eina_File_Direct_Info *info; + Eina_File_Direct_Info *info; Eina_List *flist = NULL; Eina_Iterator *file_it; char buf[PATH_MAX]; @@ -879,6 +699,13 @@ _elm_config_profiles_list(void) EINA_ITERATOR_FOREACH(file_it, info) { + Eina_Stat st; + + if (eina_file_statat(eina_iterator_container_get(file_it), info, &st)) + { + ERR("this is bad."); + continue; + } if (info->name_length >= len) continue; @@ -1004,6 +831,8 @@ _config_free(void) { Elm_Font_Overlay *fo; const char *fontdir; + Elm_Custom_Palette *palette; + Elm_Color_RGBA *color; if (!_elm_config) return; EINA_LIST_FREE(_elm_config->font_dirs, fontdir) @@ -1017,6 +846,12 @@ _config_free(void) if (fo->font) eina_stringshare_del(fo->font); free(fo); } + EINA_LIST_FREE(_elm_config->color_palette, palette) + { + if (palette->palette_name) eina_stringshare_del(palette->palette_name); + EINA_LIST_FREE(palette->color_list, color) free(color); + free(palette); + } if (_elm_config->theme) eina_stringshare_del(_elm_config->theme); if (_elm_config->modules) eina_stringshare_del(_elm_config->modules); free(_elm_config); @@ -1043,7 +878,7 @@ _config_sub_apply(void) static Eina_Bool _elm_cache_flush_cb(void *data __UNUSED__) { - elm_all_flush(); + elm_cache_all_flush(); return ECORE_CALLBACK_RENEW; } @@ -1056,7 +891,7 @@ _elm_recache(void) Eina_List *l; Evas_Object *win; - elm_all_flush(); + elm_cache_all_flush(); EINA_LIST_FOREACH(_elm_win_list, l, win) { @@ -1142,8 +977,8 @@ _config_load(void) * profile. Fallback to default before moving on */ // config load fail - defaults - /* XXX: do these make sense? Only if it's valid to install the lib - * without the config, but do we want that? */ + // why are these here? well if they are, it means you can make a gui + // config recovery app i guess... _elm_config = ELM_NEW(Elm_Config); _elm_config->config_version = ELM_CONFIG_VERSION; _elm_config->engine = eina_stringshare_add("software_x11"); @@ -1193,18 +1028,22 @@ _config_load(void) _elm_config->is_mirrored = EINA_FALSE; /* Read sys value in env_get() */ _elm_config->password_show_last = EINA_FALSE; _elm_config->password_show_last_timeout = 2.0; - _elm_config->glayer_zoom_finger_enable = EINA_FALSE; + _elm_config->glayer_zoom_finger_enable = EINA_TRUE; _elm_config->glayer_zoom_finger_factor = 1.0; _elm_config->glayer_zoom_wheel_factor = 0.05; _elm_config->glayer_zoom_distance_tolerance = 1.0; /* 1 times elm_finger_size_get() */ - _elm_config->glayer_rotate_finger_enable = EINA_FALSE; - _elm_config->glayer_rotate_angular_tolerance = 0.034906585; /* Represents 2 DEG */ + _elm_config->glayer_rotate_finger_enable = EINA_TRUE; + _elm_config->glayer_rotate_angular_tolerance = 2.0; /* 2 DEG */ _elm_config->glayer_line_min_length = 1.0; /* 1 times elm_finger_size_get() */ _elm_config->glayer_line_distance_tolerance = 3.0; /* 3 times elm_finger_size_get() */ - _elm_config->glayer_line_angular_tolerance = 0.34906585; /* Represents 20 DEG */ - _elm_config->glayer_flick_time_limit_ms = 60; /* 60 ms to finish flick */ + _elm_config->glayer_line_angular_tolerance = 20.0; /* 20 DEG */ + _elm_config->glayer_flick_time_limit_ms = 120; /* ms to finish flick */ _elm_config->glayer_long_tap_start_timeout = 1.2; /* 1.2 second to start long-tap */ _elm_config->glayer_continues_enable = EINA_TRUE; /* Continue gestures default */ + _elm_config->week_start = 1; /* monday */ + _elm_config->weekend_start = 6; /* saturday */ + _elm_config->weekend_len = 2; + _elm_config->color_palette = NULL; } static const char * @@ -1335,7 +1174,7 @@ _elm_config_save(void) ok = ecore_file_mkpath(buf); if (!ok) { - ERR("Problem acessing Elementary's user configuration directory: %s", + ERR("Problem accessing Elementary's user configuration directory: %s", buf); return EINA_FALSE; } @@ -1497,8 +1336,18 @@ _env_get(void) (!strcasecmp(s, "software-16-wince-gdi")) || (!strcasecmp(s, "software_16_wince_gdi"))) eina_stringshare_replace(&_elm_config->engine, ELM_SOFTWARE_16_WINCE); + else if (!strcasecmp(s, "buffer")) + eina_stringshare_replace(&_elm_config->engine, ELM_BUFFER); else if ((!strncmp(s, "shot:", 5))) eina_stringshare_replace(&_elm_config->engine, s); + else if ((!strcasecmp(s, "ews"))) + eina_stringshare_replace(&_elm_config->engine, ELM_EWS); + else if ((!strcasecmp(s, "wayland_shm"))) + eina_stringshare_replace(&_elm_config->engine, ELM_WAYLAND_SHM); + else if ((!strcasecmp(s, "wayland_egl"))) + eina_stringshare_replace(&_elm_config->engine, ELM_WAYLAND_EGL); + else + ERR("Unknown engine '%s'.", s); } s = getenv("ELM_VSYNC"); @@ -1617,8 +1466,6 @@ _env_get(void) s = getenv("ELM_SCALE"); if (s) _elm_config->scale = atof(s); - _elm_config->finger_size = - (double)_elm_config->finger_size * _elm_config->scale; s = getenv("ELM_FINGER_SIZE"); if (s) _elm_config->finger_size = atoi(s); @@ -1689,91 +1536,649 @@ _env_get(void) } EAPI Eina_Bool -elm_mirrored_get(void) +elm_config_mirrored_get(void) { return _elm_config->is_mirrored; } EAPI void -elm_mirrored_set(Eina_Bool mirrored) +elm_config_mirrored_set(Eina_Bool mirrored) { _elm_config->is_mirrored = mirrored; _elm_rescale(); } -void -_elm_config_init(void) +EAPI Eina_Bool +elm_config_cursor_engine_only_get(void) { - _desc_init(); - _profile_fetch_from_conf(); - _config_load(); -// NOTE: Do not merge upstream code. Just leave it. -// _env_get(); -// _config_apply(); -// _elm_config_font_overlay_apply(); -// _elm_recache(); + return _elm_config->cursor_engine_only; } -void -_elm_config_sub_init(void) +EAPI void +elm_config_cursor_engine_only_set(Eina_Bool engine_only) { - // NOTE: Do not merge upstream code. Just leave it. - _env_get(); - _config_apply(); - _elm_config_font_overlay_apply(); - _elm_recache(); + engine_only = !!engine_only; + _elm_config->cursor_engine_only = engine_only; +} -#define ENGINE_COMPARE(name) (!strcmp(_elm_config->engine, name)) - if (ENGINE_COMPARE(ELM_SOFTWARE_X11) || - ENGINE_COMPARE(ELM_SOFTWARE_16_X11) || - ENGINE_COMPARE(ELM_XRENDER_X11) || - ENGINE_COMPARE(ELM_OPENGL_X11) || - ENGINE_COMPARE(ELM_OPENGL_COCOA)) -#undef ENGINE_COMPARE - { -#ifdef HAVE_ELEMENTARY_X - unsigned int val = 1000; +EINA_DEPRECATED EAPI double +elm_tooltip_delay_get(void) +{ + return elm_config_tooltip_delay_get(); +} - if (!ecore_x_init(NULL)) - { - ERR("Cannot connect to X11 display. check $DISPLAY variable"); - exit(1); - } - _root_1st = ecore_x_window_root_first_get(); +EINA_DEPRECATED EAPI Eina_Bool +elm_tooltip_delay_set(double delay) +{ + elm_config_tooltip_delay_set(delay); + return EINA_TRUE; +} - if (!ecore_x_screen_is_composited(0)) - _elm_config->compositing = 0; +EAPI double +elm_config_tooltip_delay_get(void) +{ + return _elm_config->tooltip_delay; +} - ecore_x_atoms_get(_atom_names, ATOM_COUNT, _atom); - ecore_x_event_mask_set(_root_1st, - ECORE_X_EVENT_MASK_WINDOW_PROPERTY); - _prop_change_handler = ecore_event_handler_add - (ECORE_X_EVENT_WINDOW_PROPERTY, _prop_change, NULL); - if (!getenv("ELM_FINGER_SIZE")) +EAPI void +elm_config_tooltip_delay_set(double delay) +{ + if (delay < 0.0) return; + _elm_config->tooltip_delay = delay; +} + +EAPI double +elm_scale_get(void) +{ + return elm_config_scale_get(); +} + +EAPI double +elm_config_scale_get(void) +{ + return _elm_config->scale; +} + +EAPI void +elm_scale_set(double scale) +{ + elm_config_scale_set(scale); +} + +EAPI void +elm_config_scale_set(double scale) +{ + if (_elm_config->scale == scale) return; + _elm_config->scale = scale; + _elm_rescale(); +} + +EAPI Eina_Bool +elm_config_password_show_last_get(void) +{ + return _elm_config->password_show_last; +} + +EAPI void +elm_config_password_show_last_set(Eina_Bool password_show_last) +{ + if (_elm_config->password_show_last == password_show_last) return; + _elm_config->password_show_last = password_show_last; + edje_password_show_last_set(_elm_config->password_show_last); +} + +EAPI double +elm_config_password_show_last_timeout_get(void) +{ + return _elm_config->password_show_last_timeout; +} + +EAPI void +elm_config_password_show_last_timeout_set(double password_show_last_timeout) +{ + if (_elm_config->password_show_last_timeout == password_show_last_timeout) return; + _elm_config->password_show_last_timeout = password_show_last_timeout; + edje_password_show_last_timeout_set(_elm_config->password_show_last_timeout); +} + +EAPI Eina_Bool +elm_config_save(void) +{ + return _elm_config_save(); +} + +EAPI void +elm_config_reload(void) +{ + _elm_config_reload(); +} + +EAPI const char * +elm_config_profile_get(void) +{ + return _elm_config_current_profile_get(); +} + +EAPI const char * +elm_config_profile_dir_get(const char *profile, + Eina_Bool is_user) +{ + return _elm_config_profile_dir_get(profile, is_user); +} + +EAPI void +elm_config_profile_dir_free(const char *p_dir) +{ + free((void *)p_dir); +} + +EAPI Eina_List * +elm_config_profile_list_get(void) +{ + return _elm_config_profiles_list(); +} + +EAPI void +elm_config_profile_list_free(Eina_List *l) +{ + const char *dir; + + EINA_LIST_FREE(l, dir) + eina_stringshare_del(dir); +} + +EAPI void +elm_config_profile_set(const char *profile) +{ + EINA_SAFETY_ON_NULL_RETURN(profile); + _elm_config_profile_set(profile); +} + +EAPI const char * +elm_config_engine_get(void) +{ + return _elm_config->engine; +} + +EAPI void +elm_config_engine_set(const char *engine) +{ + EINA_SAFETY_ON_NULL_RETURN(engine); + + _elm_config_engine_set(engine); +} + +EAPI Eina_List * +elm_config_text_classes_list_get(void) +{ + return _elm_config_text_classes_get(); +} + +EAPI void +elm_config_text_classes_list_free(Eina_List *list) +{ + _elm_config_text_classes_free(list); +} + +EAPI const Eina_List * +elm_config_font_overlay_list_get(void) +{ + return _elm_config_font_overlays_list(); +} + +EAPI void +elm_config_font_overlay_set(const char *text_class, + const char *font, + Evas_Font_Size size) +{ + EINA_SAFETY_ON_NULL_RETURN(text_class); + _elm_config_font_overlay_set(text_class, font, size); +} + +EAPI void +elm_config_font_overlay_unset(const char *text_class) +{ + EINA_SAFETY_ON_NULL_RETURN(text_class); + _elm_config_font_overlay_remove(text_class); +} + +EAPI void +elm_config_font_overlay_apply(void) +{ + _elm_config_font_overlay_apply(); +} +// WRAPPER:: will be removed soon. +EAPI Evas_Coord +elm_finger_size_get(void) +{ + return elm_config_finger_size_get(); +} + +EAPI Evas_Coord +elm_config_finger_size_get(void) +{ + return _elm_config->finger_size; +} + +// WRAPPER:: will be removed soon. +EAPI void +elm_finger_size_set(Evas_Coord size) +{ + elm_config_finger_size_set(size); +} + +EAPI void +elm_config_finger_size_set(Evas_Coord size) +{ + if (_elm_config->finger_size == size) return; + _elm_config->finger_size = size; + _elm_rescale(); +} + +EAPI int +elm_config_cache_flush_interval_get(void) +{ + return _elm_config->cache_flush_poll_interval; +} + +EAPI void +elm_config_cache_flush_interval_set(int size) +{ + if (_elm_config->cache_flush_poll_interval == size) return; + _elm_config->cache_flush_poll_interval = size; + + _elm_recache(); +} + +EAPI Eina_Bool +elm_config_cache_flush_enabled_get(void) +{ + return _elm_config->cache_flush_enable; +} + +EAPI void +elm_config_cache_flush_enabled_set(Eina_Bool enabled) +{ + enabled = !!enabled; + if (_elm_config->cache_flush_enable == enabled) return; + _elm_config->cache_flush_enable = enabled; + + _elm_recache(); +} + +EINA_DEPRECATED EAPI int +elm_font_cache_get(void) +{ + return elm_config_cache_font_cache_size_get(); +} + +EAPI int +elm_config_cache_font_cache_size_get(void) +{ + return _elm_config->font_cache; +} + +EINA_DEPRECATED EAPI void +elm_font_cache_set(int size) +{ + elm_config_cache_font_cache_size_set(size); +} + +EAPI void +elm_config_cache_font_cache_size_set(int size) +{ + if (_elm_config->font_cache == size) return; + _elm_config->font_cache = size; + + _elm_recache(); +} + +EINA_DEPRECATED EAPI int +elm_image_cache_get(void) +{ + return elm_config_cache_image_cache_size_get(); +} + +EAPI int +elm_config_cache_image_cache_size_get(void) +{ + return _elm_config->image_cache; +} + +EINA_DEPRECATED EAPI void +elm_image_cache_set(int size) +{ + elm_config_cache_image_cache_size_set(size); +} + +EAPI void +elm_config_cache_image_cache_size_set(int size) +{ + if (_elm_config->image_cache == size) return; + _elm_config->image_cache = size; + + _elm_recache(); +} + +EINA_DEPRECATED EAPI int +elm_edje_file_cache_get(void) +{ + return elm_config_cache_edje_file_cache_size_get(); +} + +EAPI int +elm_config_cache_edje_file_cache_size_get() +{ + return _elm_config->edje_cache; +} + +EINA_DEPRECATED EAPI void +elm_edje_file_cache_set(int size) +{ + elm_config_cache_edje_file_cache_size_set(size); +} + +EAPI void +elm_config_cache_edje_file_cache_size_set(int size) +{ + if (_elm_config->edje_cache == size) return; + _elm_config->edje_cache = size; + + _elm_recache(); +} + +EINA_DEPRECATED EAPI int +elm_edje_collection_cache_get(void) +{ + return elm_config_cache_edje_collection_cache_size_get(); +} + +EAPI int +elm_config_cache_edje_collection_cache_size_get(void) +{ + return _elm_config->edje_collection_cache; +} + +EINA_DEPRECATED EAPI void +elm_edje_collection_cache_set(int size) +{ + elm_config_cache_edje_collection_cache_size_set(size); +} + +EAPI void +elm_config_cache_edje_collection_cache_size_set(int size) +{ + if (_elm_config->edje_collection_cache == size) return; + _elm_config->edje_collection_cache = size; + + _elm_recache(); +} + +EAPI Eina_Bool +elm_config_focus_highlight_enabled_get(void) +{ + return _elm_config->focus_highlight_enable; +} + +EAPI void +elm_config_focus_highlight_enabled_set(Eina_Bool enable) +{ + _elm_config->focus_highlight_enable = !!enable; +} + +EAPI Eina_Bool +elm_config_focus_highlight_animate_get(void) +{ + return _elm_config->focus_highlight_animate; +} + +EAPI void +elm_config_focus_highlight_animate_set(Eina_Bool animate) +{ + _elm_config->focus_highlight_animate = !!animate; +} + +EAPI Eina_Bool +elm_config_scroll_bounce_enabled_get(void) +{ + return _elm_config->thumbscroll_bounce_enable; +} + +EAPI void +elm_config_scroll_bounce_enabled_set(Eina_Bool enabled) +{ + _elm_config->thumbscroll_bounce_enable = enabled; +} + +EAPI double +elm_config_scroll_bounce_friction_get(void) +{ + return _elm_config->thumbscroll_bounce_friction; +} + +EAPI void +elm_config_scroll_bounce_friction_set(double friction) +{ + _elm_config->thumbscroll_bounce_friction = friction; +} + +EAPI double +elm_config_scroll_page_scroll_friction_get(void) +{ + return _elm_config->page_scroll_friction; +} + +EAPI void +elm_config_scroll_page_scroll_friction_set(double friction) +{ + _elm_config->page_scroll_friction = friction; +} + +EAPI double +elm_config_scroll_bring_in_scroll_friction_get(void) +{ + return _elm_config->bring_in_scroll_friction; +} + +EAPI void +elm_config_scroll_bring_in_scroll_friction_set(double friction) +{ + _elm_config->bring_in_scroll_friction = friction; +} + +EAPI double +elm_config_scroll_zoom_friction_get(void) +{ + return _elm_config->zoom_friction; +} + +EAPI void +elm_config_scroll_zoom_friction_set(double friction) +{ + _elm_config->zoom_friction = friction; +} + +EAPI Eina_Bool +elm_config_scroll_thumbscroll_enabled_get(void) +{ + return _elm_config->thumbscroll_enable; +} + +EAPI void +elm_config_scroll_thumbscroll_enabled_set(Eina_Bool enabled) +{ + _elm_config->thumbscroll_enable = enabled; +} + +EAPI unsigned int +elm_config_scroll_thumbscroll_threshold_get(void) +{ + return _elm_config->thumbscroll_threshold; +} + +EAPI void +elm_config_scroll_thumbscroll_threshold_set(unsigned int threshold) +{ + _elm_config->thumbscroll_threshold = threshold; +} + +EAPI double +elm_config_scroll_thumbscroll_momentum_threshold_get(void) +{ + return _elm_config->thumbscroll_momentum_threshold; +} + +EAPI void +elm_config_scroll_thumbscroll_momentum_threshold_set(double threshold) +{ + _elm_config->thumbscroll_momentum_threshold = threshold; +} + +EAPI double +elm_config_scroll_thumbscroll_friction_get(void) +{ + return _elm_config->thumbscroll_friction; +} + +EAPI void +elm_config_scroll_thumbscroll_friction_set(double friction) +{ + _elm_config->thumbscroll_friction = friction; +} + +EAPI double +elm_config_scroll_thumbscroll_border_friction_get(void) +{ + return _elm_config->thumbscroll_border_friction; +} + +EAPI void +elm_config_scroll_thumbscroll_border_friction_set(double friction) +{ + if (friction < 0.0) friction = 0.0; + if (friction > 1.0) friction = 1.0; + _elm_config->thumbscroll_friction = friction; +} + +EAPI double +elm_config_scroll_thumbscroll_sensitivity_friction_get(void) +{ + return _elm_config->thumbscroll_sensitivity_friction; +} + +EAPI void +elm_config_scroll_thumbscroll_sensitivity_friction_set(double friction) +{ + if (friction < 0.1) friction = 0.1; + if (friction > 1.0) friction = 1.0; + _elm_config->thumbscroll_friction = friction; +} + +EAPI void +elm_config_longpress_timeout_set(double longpress_timeout) +{ + _elm_config->longpress_timeout = longpress_timeout; +} + +EAPI double +elm_config_longpress_timeout_get(void) +{ + return _elm_config->longpress_timeout; +} + +EAPI void +elm_config_all_flush(void) +{ +#ifdef HAVE_ELEMENTARY_X + if (_prop_all_update_timer) ecore_timer_del(_prop_all_update_timer); + _prop_all_update_timer = ecore_timer_add(0.1, _prop_all_update_cb, NULL); +#endif +} + +static void +_translation_init() +{ +#ifdef ENABLE_NLS + const char *cur_dom = textdomain(NULL); + const char *trans_comment = gettext(""); + const char *msg_locale = setlocale(LC_MESSAGES, NULL); + + /* Same concept as what glib does: + * We shouldn't translate if there are no translations for the + * application in the current locale + domain. (Unless locale is + * en_/C where translating only parts of the interface make some + * sense). + */ + _elm_config->translate = !(strcmp (cur_dom, "messages") && + !*trans_comment && strncmp (msg_locale, "en_", 3) && + strcmp (msg_locale, "C")); +#endif +} + +void +_elm_config_init(void) +{ + if (!ELM_EVENT_CONFIG_ALL_CHANGED) + ELM_EVENT_CONFIG_ALL_CHANGED = ecore_event_type_new(); + _desc_init(); + _profile_fetch_from_conf(); + _config_load(); + if (_elm_preferred_engine) eina_stringshare_del(_elm_preferred_engine); + if (_elm_config->engine) + _elm_preferred_engine = eina_stringshare_add(_elm_config->engine); + else + _elm_preferred_engine = NULL; + _translation_init(); + _env_get(); + _config_apply(); + _elm_config_font_overlay_apply(); + _elm_recache(); +} + +void +_elm_config_sub_shutdown(void) +{ +#define ENGINE_COMPARE(name) (!strcmp(_elm_config->engine, name)) + if (ENGINE_COMPARE(ELM_SOFTWARE_X11) || + ENGINE_COMPARE(ELM_SOFTWARE_16_X11) || + ENGINE_COMPARE(ELM_XRENDER_X11) || + ENGINE_COMPARE(ELM_OPENGL_X11) || + ENGINE_COMPARE(ELM_OPENGL_COCOA)) +#undef ENGINE_COMPARE + { +#ifdef HAVE_ELEMENTARY_X + ecore_x_disconnect(); +#endif + } +} + +void +_elm_config_sub_init(void) +{ +#define ENGINE_COMPARE(name) (!strcmp(_elm_config->engine, name)) + if (ENGINE_COMPARE(ELM_SOFTWARE_X11) || + ENGINE_COMPARE(ELM_SOFTWARE_16_X11) || + ENGINE_COMPARE(ELM_XRENDER_X11) || + ENGINE_COMPARE(ELM_OPENGL_X11) || + ENGINE_COMPARE(ELM_OPENGL_COCOA)) +#undef ENGINE_COMPARE + { +#ifdef HAVE_ELEMENTARY_X + if (!ecore_x_init(NULL)) { - if (ecore_x_window_prop_card32_get(_root_1st, - _atom[ATOM_E_FINGER_SIZE], - &val, 1) > 0) - { - if (val > 0) - { - _elm_config->finger_size = val; - } - } + ERR("Cannot connect to X11 display. check $DISPLAY variable"); + exit(1); } - if (!getenv("ELM_THEME")) - { - char *s; + _root_1st = ecore_x_window_root_first_get(); - s = ecore_x_window_prop_string_get(_root_1st, - _atom[ATOM_E_THEME]); - if (s) - { - eina_stringshare_replace(&_elm_config->theme, s); - _elm_theme_parse(NULL, s); - free(s); - } - } + if (!ecore_x_screen_is_composited(0)) + _elm_config->compositing = 0; + + ecore_x_atoms_get(_atom_names, ATOM_COUNT, _atom); + ecore_x_event_mask_set(_root_1st, + ECORE_X_EVENT_MASK_WINDOW_PROPERTY); + _prop_change_handler = ecore_event_handler_add + (ECORE_X_EVENT_WINDOW_PROPERTY, _prop_change, NULL); if (!getenv("ELM_PROFILE")) { char *s; @@ -1791,8 +2196,8 @@ _elm_config_sub_init(void) } _elm_profile = s; if (changed) _prop_config_get(); - } - } + } + } #endif } _config_sub_apply(); @@ -1818,6 +2223,24 @@ _elm_config_engine_set(const char *engine) _elm_config->engine = eina_stringshare_add(engine); } +EAPI const char * +elm_config_preferred_engine_get(void) +{ + return _elm_preferred_engine; +} + +EAPI void +elm_config_preferred_engine_set(const char *engine) +{ + if (engine) + eina_stringshare_replace(&(_elm_preferred_engine), engine); + else + { + if (_elm_preferred_engine) eina_stringshare_del(_elm_preferred_engine); + _elm_preferred_engine = eina_stringshare_add(_elm_config->engine); + } +} + void _elm_config_profile_set(const char *profile) { @@ -1846,6 +2269,17 @@ _elm_config_profile_set(const char *profile) void _elm_config_shutdown(void) { +#ifdef HAVE_ELEMENTARY_X + if (_prop_all_update_timer) + { + ecore_timer_del(_prop_all_update_timer); + _prop_all_update_timer = NULL; + _prop_all_update_cb(NULL); + } + if (_prop_change_delay_timer) ecore_timer_del(_prop_change_delay_timer); + _prop_change_delay_timer = NULL; +#endif + #define ENGINE_COMPARE(name) (!strcmp(_elm_config->engine, name)) if (ENGINE_COMPARE(ELM_SOFTWARE_X11) || ENGINE_COMPARE(ELM_SOFTWARE_16_X11) || @@ -1859,6 +2293,11 @@ _elm_config_shutdown(void) #endif } _config_free(); + if (_elm_preferred_engine) + { + eina_stringshare_del(_elm_preferred_engine); + _elm_preferred_engine = NULL; + } if (_elm_profile) { free(_elm_profile);