X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=src%2Flib%2Felm_config.c;h=3df22722080aac6febb2ce11e4ac6f66a3bd7273;hb=afe3b8cd136a6b9ce2f81d769e342cb503fc8aad;hp=f0b006e7b011b1c288a7c10f15f7e0d91a30f29c;hpb=b6c01fcabd0c9bf680c7a0d2ea1b5ec75f92fb04;p=framework%2Fuifw%2Felementary.git diff --git a/src/lib/elm_config.c b/src/lib/elm_config.c index f0b006e..3df2272 100644 --- a/src/lib/elm_config.c +++ b/src/lib/elm_config.c @@ -9,6 +9,8 @@ #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; @@ -29,6 +31,10 @@ const char *_elm_engines[] = { "sdl", "software_16_sdl", "opengl_sdl", + "buffer", + "ews", + "opengl_cocoa", + "psl1ght", NULL }; @@ -72,64 +78,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 22 +#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_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_PAGE_SCROLL_FRICTION 18 -#define ATOM_E_THUMBSCROLL_BRING_IN_SCROLL_FRICTION 19 -#define ATOM_E_THUMBSCROLL_ZOOM_FRICTION 20 -#define ATOM_E_CONFIG 21 +#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; @@ -138,7 +118,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, @@ -179,337 +159,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; + snprintf(buf, sizeof(buf), "ELM_CONFIG_%s", _elm_profile); + atom = ecore_x_atom_get(buf); + _atom_config = atom; - 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) - { - if (val > 0) - _elm_config->thumbscroll_momentum_threshold = - (double)val / 1000.0; - } - } - else if (event->atom == _atom[ATOM_E_THUMBSCROLL_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) - { - if (val > 0) - _elm_config->thumbscroll_friction = (double)val / 1000.0; - } - } - else if (event->atom == _atom[ATOM_E_THUMBSCROLL_BORDER_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) - { - if (val > 0) - _elm_config->thumbscroll_border_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) - { - if (val > 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) - { - if (val > 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) - { - if (val > 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; @@ -562,16 +273,22 @@ _desc_init(void) #define D _config_edd ELM_CONFIG_VAL(D, T, config_version, T_INT); ELM_CONFIG_VAL(D, T, engine, T_STRING); + ELM_CONFIG_VAL(D, T, vsync, T_UCHAR); ELM_CONFIG_VAL(D, T, thumbscroll_enable, T_UCHAR); ELM_CONFIG_VAL(D, T, thumbscroll_threshold, T_INT); ELM_CONFIG_VAL(D, T, thumbscroll_momentum_threshold, T_DOUBLE); ELM_CONFIG_VAL(D, T, thumbscroll_friction, T_DOUBLE); ELM_CONFIG_VAL(D, T, thumbscroll_bounce_friction, T_DOUBLE); ELM_CONFIG_VAL(D, T, thumbscroll_border_friction, T_DOUBLE); + ELM_CONFIG_VAL(D, T, thumbscroll_sensitivity_friction, T_DOUBLE); ELM_CONFIG_VAL(D, T, page_scroll_friction, T_DOUBLE); ELM_CONFIG_VAL(D, T, bring_in_scroll_friction, T_DOUBLE); ELM_CONFIG_VAL(D, T, zoom_friction, T_DOUBLE); ELM_CONFIG_VAL(D, T, thumbscroll_bounce_enable, T_UCHAR); + ELM_CONFIG_VAL(D, T, scroll_smooth_amount, T_DOUBLE); + ELM_CONFIG_VAL(D, T, scroll_smooth_history_weight, T_DOUBLE); + ELM_CONFIG_VAL(D, T, scroll_smooth_future_time, T_DOUBLE); + ELM_CONFIG_VAL(D, T, scroll_smooth_time_window, T_DOUBLE); ELM_CONFIG_VAL(D, T, scale, T_DOUBLE); ELM_CONFIG_VAL(D, T, bgpixmap, T_INT); ELM_CONFIG_VAL(D, T, compositing, T_INT); @@ -597,6 +314,21 @@ _desc_init(void) ELM_CONFIG_VAL(D, T, inwin_dialogs_enable, T_UCHAR); ELM_CONFIG_VAL(D, T, icon_size, T_INT); ELM_CONFIG_VAL(D, T, longpress_timeout, T_DOUBLE); + ELM_CONFIG_VAL(D, T, effect_enable, T_UCHAR); + ELM_CONFIG_VAL(D, T, desktop_entry, T_UCHAR); + ELM_CONFIG_VAL(D, T, password_show_last, T_UCHAR); + ELM_CONFIG_VAL(D, T, password_show_last_timeout, T_DOUBLE); + ELM_CONFIG_VAL(D, T, glayer_zoom_finger_factor, T_DOUBLE); + ELM_CONFIG_VAL(D, T, glayer_zoom_wheel_factor, T_DOUBLE); + ELM_CONFIG_VAL(D, T, glayer_zoom_distance_tolerance, T_DOUBLE); + ELM_CONFIG_VAL(D, T, glayer_rotate_angular_tolerance, T_DOUBLE); + ELM_CONFIG_VAL(D, T, glayer_line_min_length, T_DOUBLE); + ELM_CONFIG_VAL(D, T, glayer_line_distance_tolerance, T_DOUBLE); + ELM_CONFIG_VAL(D, T, glayer_line_angular_tolerance, T_DOUBLE); + ELM_CONFIG_VAL(D, T, glayer_flick_time_limit_ms, T_INT); + 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); #undef T #undef D #undef T_INT @@ -669,7 +401,11 @@ _elm_user_dir_snprintf(char *dst, size_t user_dir_len, off; va_list ap; +#ifdef _WIN32 + home = evil_homedir_get(); +#else home = getenv("HOME"); +#endif if (!home) home = "/"; @@ -893,9 +629,8 @@ sys: continue; } } - return flist; - eina_iterator_free(file_it); + return flist; list_free: EINA_LIST_FREE(flist, dir) @@ -995,6 +730,8 @@ _config_sub_apply(void) { edje_frametime_set(1.0 / _elm_config->fps); edje_scale_set(_elm_config->scale); + edje_password_show_last_set(_elm_config->password_show_last); + edje_password_show_last_timeout_set(_elm_config->password_show_last_timeout); if (_elm_config->modules) _elm_module_parse(_elm_config->modules); } @@ -1019,8 +756,8 @@ _elm_recache(void) EINA_LIST_FOREACH(_elm_win_list, l, win) { Evas *e = evas_object_evas_get(win); - evas_image_cache_set(e, _elm_config->image_cache); - evas_font_cache_set(e, _elm_config->font_cache); + evas_image_cache_set(e, _elm_config->image_cache * 1024); + evas_font_cache_set(e, _elm_config->font_cache * 1024); } edje_file_cache_set(_elm_config->edje_cache); edje_collection_cache_set(_elm_config->edje_collection_cache); @@ -1105,6 +842,7 @@ _config_load(void) _elm_config = ELM_NEW(Elm_Config); _elm_config->config_version = ELM_CONFIG_VERSION; _elm_config->engine = eina_stringshare_add("software_x11"); + _elm_config->vsync = 0; _elm_config->thumbscroll_enable = EINA_TRUE; _elm_config->thumbscroll_threshold = 24; _elm_config->thumbscroll_momentum_threshold = 100.0; @@ -1115,6 +853,11 @@ _config_load(void) _elm_config->bring_in_scroll_friction = 0.5; _elm_config->zoom_friction = 0.5; _elm_config->thumbscroll_border_friction = 0.5; + _elm_config->thumbscroll_sensitivity_friction = 0.25; // magic number! just trial and error shows this makes it behave "nicer" and not run off at high speed all the time + _elm_config->scroll_smooth_amount = 1.0; + _elm_config->scroll_smooth_history_weight = 0.3; + _elm_config->scroll_smooth_future_time = 0.0; + _elm_config->scroll_smooth_time_window = 0.2; _elm_config->scale = 1.0; _elm_config->bgpixmap = 0; _elm_config->compositing = 1; @@ -1139,6 +882,21 @@ _config_load(void) _elm_config->inwin_dialogs_enable = EINA_FALSE; _elm_config->icon_size = 32; _elm_config->longpress_timeout = 1.0; + _elm_config->effect_enable = EINA_TRUE; + _elm_config->desktop_entry = EINA_FALSE; + _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_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_angular_tolerance = 0.034906585; /* Represents 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_long_tap_start_timeout = 1.2; /* 1.2 second to start long-tap */ + _elm_config->glayer_continues_enable = EINA_TRUE; /* Continue gestures default */ } static const char * @@ -1380,7 +1138,7 @@ _env_get(void) (!strcasecmp(s, "opengl_x11"))) eina_stringshare_replace(&_elm_config->engine, ELM_OPENGL_X11); else if ((!strcasecmp(s, "x11-8")) || - (!strcasecmp(s, "x18")) || + (!strcasecmp(s, "x8")) || (!strcasecmp(s, "software-8-x11")) || (!strcasecmp(s, "software_8_x11"))) eina_stringshare_replace(&_elm_config->engine, ELM_SOFTWARE_8_X11); @@ -1389,11 +1147,13 @@ _env_get(void) (!strcasecmp(s, "software-16-x11")) || (!strcasecmp(s, "software_16_x11"))) eina_stringshare_replace(&_elm_config->engine, ELM_SOFTWARE_16_X11); +/* else if ((!strcasecmp(s, "xrender")) || (!strcasecmp(s, "xr")) || (!strcasecmp(s, "xrender-x11")) || (!strcasecmp(s, "xrender_x11"))) eina_stringshare_replace(&_elm_config->engine, ELM_XRENDER_X11); + */ else if ((!strcasecmp(s, "fb")) || (!strcasecmp(s, "software-fb")) || (!strcasecmp(s, "software_fb"))) @@ -1401,6 +1161,8 @@ _env_get(void) else if ((!strcasecmp(s, "directfb")) || (!strcasecmp(s, "dfb"))) eina_stringshare_replace(&_elm_config->engine, ELM_SOFTWARE_DIRECTFB); + else if ((!strcasecmp(s, "psl1ght"))) + eina_stringshare_replace(&_elm_config->engine, ELM_SOFTWARE_PSL1GHT); else if ((!strcasecmp(s, "sdl")) || (!strcasecmp(s, "software-sdl")) || (!strcasecmp(s, "software_sdl"))) @@ -1414,6 +1176,11 @@ _env_get(void) (!strcasecmp(s, "gl-sdl")) || (!strcasecmp(s, "gl_sdl"))) eina_stringshare_replace(&_elm_config->engine, ELM_OPENGL_SDL); + else if ((!strcasecmp(s, "opengl-cocoa")) || + (!strcasecmp(s, "opengl_cocoa")) || + (!strcasecmp(s, "gl-cocoa")) || + (!strcasecmp(s, "gl_cocoa"))) + eina_stringshare_replace(&_elm_config->engine, ELM_OPENGL_COCOA); else if ((!strcasecmp(s, "gdi")) || (!strcasecmp(s, "software-gdi")) || (!strcasecmp(s, "software_gdi"))) @@ -1422,8 +1189,17 @@ _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); } + s = getenv("ELM_VSYNC"); + if (s) _elm_config->vsync = !!atoi(s); + s = getenv("ELM_THUMBSCROLL_ENABLE"); if (s) _elm_config->thumbscroll_enable = !!atoi(s); s = getenv("ELM_THUMBSCROLL_THRESHOLD"); @@ -1455,6 +1231,26 @@ _env_get(void) _elm_config->thumbscroll_border_friction = friction; } + s = getenv("ELM_THUMBSCROLL_SENSITIVITY_FRICTION"); + if (s) + { + friction = atof(s); + if (friction < 0.1) + friction = 0.1; + + if (friction > 1.0) + friction = 1.0; + + _elm_config->thumbscroll_sensitivity_friction = friction; + } + s = getenv("ELM_SCROLL_SMOOTH_AMOUNT"); + if (s) _elm_config->scroll_smooth_amount = atof(s); + s = getenv("ELM_SCROLL_SMOOTH_HISTORY_WEIGHT"); + if (s) _elm_config->scroll_smooth_history_weight = atof(s); + s = getenv("ELM_SCROLL_SMOOTH_FUTURE_TIME"); + if (s) _elm_config->scroll_smooth_future_time = atof(s); + s = getenv("ELM_SCROLL_SMOOTH_TIME_WINDOW"); + if (s) _elm_config->scroll_smooth_time_window = atof(s); s = getenv("ELM_THEME"); if (s) eina_stringshare_replace(&_elm_config->theme, s); @@ -1520,6 +1316,17 @@ _env_get(void) s = getenv("ELM_FINGER_SIZE"); if (s) _elm_config->finger_size = atoi(s); + s = getenv("ELM_PASSWORD_SHOW_LAST"); + if (s) _elm_config->password_show_last = !!atoi(s); + + s = getenv("ELM_PASSWORD_SHOW_LAST_TIMEOUT"); + if (s) + { + double pw_show_last_timeout = atof(s); + if (pw_show_last_timeout >= 0.0) + _elm_config->password_show_last_timeout = pw_show_last_timeout; + } + s = getenv("ELM_FPS"); if (s) _elm_config->fps = atof(s); if (_elm_config->fps < 1.0) _elm_config->fps = 1.0; @@ -1527,6 +1334,11 @@ _env_get(void) s = getenv("ELM_MODULES"); if (s) eina_stringshare_replace(&_elm_config->modules, s); + /* Get RTL orientation from system */ + setlocale(LC_ALL, ""); + bindtextdomain(PACKAGE, LOCALE_DIR); + _elm_config->is_mirrored = !strcmp(E_("default:LTR"), "default:RTL"); + s = getenv("ELM_TOOLTIP_DELAY"); if (s) { @@ -1560,14 +1372,58 @@ _env_get(void) if (s) _elm_config->longpress_timeout = atof(s); if (_elm_config->longpress_timeout < 0.0) _elm_config->longpress_timeout = 0.0; + + s = getenv("ELM_EFFECT_ENABLE"); + if (s) _elm_config->effect_enable = !!atoi(s); + + s = getenv("ELM_DESKTOP_ENTRY"); + if (s) _elm_config->desktop_entry = !!atoi(s); + s = getenv("ELM_ACCESS_MODE"); + if (s) _elm_config->access_mode = ELM_ACCESS_MODE_ON; +} + +EAPI Eina_Bool +elm_mirrored_get(void) +{ + return _elm_config->is_mirrored; +} + +EAPI void +elm_mirrored_set(Eina_Bool mirrored) +{ + _elm_config->is_mirrored = mirrored; + _elm_rescale(); +} + +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(); + _translation_init(); _env_get(); _config_apply(); _elm_config_font_overlay_apply(); @@ -1575,18 +1431,34 @@ _elm_config_init(void) } void -_elm_config_sub_init(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_X11) || + ENGINE_COMPARE(ELM_OPENGL_COCOA)) #undef ENGINE_COMPARE { #ifdef HAVE_ELEMENTARY_X - unsigned int val = 1000; + 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)) { ERR("Cannot connect to X11 display. check $DISPLAY variable"); @@ -1602,49 +1474,6 @@ _elm_config_sub_init(void) ECORE_X_EVENT_MASK_WINDOW_PROPERTY); _prop_change_handler = ecore_event_handler_add (ECORE_X_EVENT_WINDOW_PROPERTY, _prop_change, NULL); - if (!getenv("ELM_SCALE")) - { - if (ecore_x_window_prop_card32_get(_root_1st, - _atom[ATOM_E_SCALE], - &val, 1) > 0) - { - if (val > 0) - { - _elm_config->scale = (double)val / 1000.0; - // FIXME: hack until e export finger size too - if (!getenv("ELM_FINGER_SIZE")) - { - _elm_config->finger_size = 40.0 * _elm_config->scale; - } - edje_scale_set(_elm_config->scale); - } - } - } - if (!getenv("ELM_FINGER_SIZE")) - { - 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; - } - } - } - if (!getenv("ELM_THEME")) - { - char *s; - - 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 (!getenv("ELM_PROFILE")) { char *s; @@ -1690,6 +1519,18 @@ _elm_config_engine_set(const char *engine) } void +_elm_config_all_update(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); + _prop_config_set(); + ecore_x_window_prop_string_set(_root_1st, _atom[ATOM_E_PROFILE], + _elm_profile); +#endif +} + +void _elm_config_profile_set(const char *profile) { Eina_Bool changed = EINA_FALSE; @@ -1717,6 +1558,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_cb(NULL); + } + _prop_all_update_timer = 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) ||