diff --git a/src/lib/elementary/elm_config.c b/src/lib/elementary/elm_config.c index 9f6df2b6f8..89e365312e 100644 --- a/src/lib/elementary/elm_config.c +++ b/src/lib/elementary/elm_config.c @@ -1820,6 +1820,60 @@ _config_load(void) _env_get(); } +static void +_elm_config_reload_do(void) +{ + Elm_Config *prev_config; + + prev_config = _elm_config; + _elm_config = NULL; + _config_load(); + if (prev_config) + { +#define KEEP_VAL(xxx) \ + if (prev_config->priv.xxx) { \ + _elm_config->xxx = prev_config->xxx; \ + } +#define KEEP_STR(xxx) \ + if (prev_config->priv.xxx) { \ + eina_stringshare_replace(&(_elm_config->xxx), prev_config->xxx); \ + } + KEEP_STR(engine); + KEEP_STR(accel); + KEEP_STR(web_backend); + KEEP_VAL(accel_override); + KEEP_VAL(vsync); + KEEP_VAL(thumbscroll_enable); + KEEP_VAL(thumbscroll_threshold); + KEEP_VAL(thumbscroll_hold_threshold); + KEEP_VAL(thumbscroll_momentum_threshold); + KEEP_VAL(thumbscroll_flick_distance_tolerance); + KEEP_VAL(thumbscroll_friction); + KEEP_VAL(thumbscroll_min_friction); + KEEP_VAL(thumbscroll_friction_standard); + KEEP_VAL(thumbscroll_bounce_friction); + KEEP_VAL(thumbscroll_acceleration_threshold); + KEEP_VAL(thumbscroll_acceleration_time_limit); + KEEP_VAL(thumbscroll_acceleration_weight); + KEEP_VAL(page_scroll_friction); + KEEP_VAL(bring_in_scroll_friction); + KEEP_VAL(zoom_friction); + KEEP_VAL(scroll_animation_disable); + KEEP_VAL(scroll_accel_factor); + KEEP_VAL(thumbscroll_bounce_enable); + KEEP_VAL(thumbscroll_border_friction); + KEEP_VAL(thumbscroll_sensitivity_friction); + KEEP_VAL(scroll_smooth_start_enable); + KEEP_VAL(scroll_smooth_amount); + KEEP_VAL(scroll_smooth_time_window); + KEEP_VAL(scale); + + _elm_config->priv = prev_config->priv; + _config_free(prev_config); + } + _env_get(); +} + static void _config_flush_get(void) { @@ -1833,10 +1887,8 @@ _config_flush_get(void) _elm_config_font_overlays_cancel(); _color_overlays_cancel(); - _config_free(_elm_config); - _elm_config = NULL; - _config_load(); - _env_get(); + + _elm_config_reload_do(); /* restore prev value which is not part of the EET file */ _elm_config->is_mirrored = is_mirrored; @@ -2711,6 +2763,7 @@ elm_config_scale_get(void) EAPI void elm_config_scale_set(double scale) { + _elm_config->priv.scale = EINA_TRUE; if (scale < 0.0) return; if (_elm_config->scale == scale) return; _elm_config->scale = scale; @@ -3128,6 +3181,7 @@ elm_config_vsync_get(void) EAPI void elm_config_vsync_set(Eina_Bool enabled) { + _elm_config->priv.vsync = EINA_TRUE; _elm_config->vsync = enabled; } @@ -3140,6 +3194,7 @@ elm_config_accel_preference_override_get(void) EAPI void elm_config_accel_preference_override_set(Eina_Bool enabled) { + _elm_config->priv.accel_override = EINA_TRUE; _elm_config->accel_override = enabled; } @@ -3225,6 +3280,7 @@ elm_config_scroll_bounce_enabled_get(void) EAPI void elm_config_scroll_bounce_enabled_set(Eina_Bool enabled) { + _elm_config->priv.thumbscroll_bounce_enable = EINA_TRUE; _elm_config->thumbscroll_bounce_enable = enabled; } @@ -3237,6 +3293,7 @@ elm_config_scroll_bounce_friction_get(void) EAPI void elm_config_scroll_bounce_friction_set(double friction) { + _elm_config->priv.thumbscroll_bounce_friction = EINA_TRUE; _elm_config->thumbscroll_bounce_friction = friction; } @@ -3249,6 +3306,7 @@ elm_config_scroll_page_scroll_friction_get(void) EAPI void elm_config_scroll_page_scroll_friction_set(double friction) { + _elm_config->priv.page_scroll_friction = EINA_TRUE; _elm_config->page_scroll_friction = friction; } @@ -3261,6 +3319,7 @@ elm_config_scroll_bring_in_scroll_friction_get(void) EAPI void elm_config_scroll_bring_in_scroll_friction_set(double friction) { + _elm_config->priv.bring_in_scroll_friction = EINA_TRUE; _elm_config->bring_in_scroll_friction = friction; } @@ -3285,6 +3344,7 @@ elm_config_scroll_thumbscroll_enabled_get(void) EAPI void elm_config_scroll_thumbscroll_enabled_set(Eina_Bool enabled) { + _elm_config->priv.thumbscroll_enable = EINA_TRUE; _elm_config->thumbscroll_enable = enabled; } @@ -3297,6 +3357,7 @@ elm_config_scroll_thumbscroll_threshold_get(void) EAPI void elm_config_scroll_thumbscroll_threshold_set(unsigned int threshold) { + _elm_config->priv.thumbscroll_threshold = EINA_TRUE; _elm_config->thumbscroll_threshold = threshold; } @@ -3309,6 +3370,7 @@ elm_config_scroll_thumbscroll_hold_threshold_get(void) EAPI void elm_config_scroll_thumbscroll_hold_threshold_set(unsigned int threshold) { + _elm_config->priv.thumbscroll_hold_threshold = EINA_TRUE; _elm_config->thumbscroll_hold_threshold = threshold; } @@ -3321,6 +3383,7 @@ elm_config_scroll_thumbscroll_momentum_threshold_get(void) EAPI void elm_config_scroll_thumbscroll_momentum_threshold_set(double threshold) { + _elm_config->priv.thumbscroll_momentum_threshold = EINA_TRUE; _elm_config->thumbscroll_momentum_threshold = threshold; } @@ -3333,6 +3396,7 @@ elm_config_scroll_thumbscroll_flick_distance_tolerance_get(void) EAPI void elm_config_scroll_thumbscroll_flick_distance_tolerance_set(unsigned int distance) { + _elm_config->priv.thumbscroll_flick_distance_tolerance = EINA_TRUE; _elm_config->thumbscroll_flick_distance_tolerance = distance; } @@ -3345,6 +3409,7 @@ elm_config_scroll_thumbscroll_friction_get(void) EAPI void elm_config_scroll_thumbscroll_friction_set(double friction) { + _elm_config->priv.thumbscroll_friction = EINA_TRUE; _elm_config->thumbscroll_friction = friction; } @@ -3357,6 +3422,7 @@ elm_config_scroll_thumbscroll_min_friction_get(void) EAPI void elm_config_scroll_thumbscroll_min_friction_set(double friction) { + _elm_config->priv.thumbscroll_min_friction = EINA_TRUE; _elm_config->thumbscroll_min_friction = friction; } @@ -3369,6 +3435,7 @@ elm_config_scroll_thumbscroll_friction_standard_get(void) EAPI void elm_config_scroll_thumbscroll_friction_standard_set(double standard) { + _elm_config->priv.thumbscroll_friction_standard = EINA_TRUE; _elm_config->thumbscroll_friction_standard = standard; } @@ -3381,6 +3448,7 @@ elm_config_scroll_thumbscroll_border_friction_get(void) EAPI void elm_config_scroll_thumbscroll_border_friction_set(double friction) { + _elm_config->priv.thumbscroll_border_friction = EINA_TRUE; if (friction < 0.0) friction = 0.0; if (friction > 1.0) friction = 1.0; _elm_config->thumbscroll_border_friction = friction; @@ -3395,18 +3463,19 @@ elm_config_scroll_thumbscroll_sensitivity_friction_get(void) EAPI Eina_Bool elm_config_context_menu_disabled_get(void) { - return _elm_config->context_menu_disabled; + return _elm_config->context_menu_disabled; } EAPI void elm_config_context_menu_disabled_set(Eina_Bool disabled) { - _elm_config->context_menu_disabled = !!disabled; + _elm_config->context_menu_disabled = !!disabled; } EAPI void elm_config_scroll_thumbscroll_sensitivity_friction_set(double friction) { + _elm_config->priv.thumbscroll_sensitivity_friction = EINA_TRUE; if (friction < 0.1) friction = 0.1; if (friction > 1.0) friction = 1.0; _elm_config->thumbscroll_sensitivity_friction = friction; @@ -3421,6 +3490,7 @@ elm_config_scroll_thumbscroll_smooth_start_get(void) EAPI void elm_config_scroll_thumbscroll_smooth_start_set(Eina_Bool enable) { + _elm_config->priv.scroll_smooth_start_enable = EINA_TRUE; _elm_config->scroll_smooth_start_enable = enable; } @@ -3433,12 +3503,14 @@ elm_config_scroll_animation_disabled_get(void) EAPI void elm_config_scroll_animation_disabled_set(Eina_Bool disable) { + _elm_config->priv.scroll_animation_disable = EINA_TRUE; _elm_config->scroll_animation_disable = !!disable; } EAPI void elm_config_scroll_accel_factor_set(double factor) { + _elm_config->priv.scroll_accel_factor = EINA_TRUE; if (factor < 0.0) factor = 0.0; if (factor > 10.0) factor = 10.0; _elm_config->scroll_accel_factor = factor; @@ -3453,6 +3525,7 @@ elm_config_scroll_accel_factor_get(void) EAPI void elm_config_scroll_thumbscroll_smooth_amount_set(double amount) { + _elm_config->priv.scroll_smooth_amount = EINA_TRUE; if (amount < 0.0) amount = 0.0; if (amount > 1.0) amount = 1.0; _elm_config->scroll_smooth_amount = amount; @@ -3467,6 +3540,7 @@ elm_config_scroll_thumbscroll_smooth_amount_get(void) EAPI void elm_config_scroll_thumbscroll_smooth_time_window_set(double amount) { + _elm_config->priv.scroll_smooth_time_window = EINA_TRUE; if (amount < 0.0) amount = 0.0; if (amount > 1.0) amount = 1.0; _elm_config->scroll_smooth_time_window = amount; @@ -3487,6 +3561,7 @@ elm_config_scroll_thumbscroll_acceleration_threshold_get(void) EAPI void elm_config_scroll_thumbscroll_acceleration_threshold_set(double threshold) { + _elm_config->priv.thumbscroll_acceleration_threshold = EINA_TRUE; _elm_config->thumbscroll_acceleration_threshold = threshold; } @@ -3499,6 +3574,7 @@ elm_config_scroll_thumbscroll_acceleration_time_limit_get(void) EAPI void elm_config_scroll_thumbscroll_acceleration_time_limit_set(double time_limit) { + _elm_config->priv.thumbscroll_acceleration_time_limit = EINA_TRUE; _elm_config->thumbscroll_acceleration_time_limit = time_limit; } @@ -3511,6 +3587,7 @@ elm_config_scroll_thumbscroll_acceleration_weight_get(void) EAPI void elm_config_scroll_thumbscroll_acceleration_weight_set(double weight) { + _elm_config->priv.thumbscroll_acceleration_weight = EINA_TRUE; _elm_config->thumbscroll_acceleration_weight = weight; } @@ -4077,11 +4154,8 @@ _elm_config_reload(void) is_mirrored = _elm_config->is_mirrored; translate = _elm_config->translate; - _config_free(_elm_config); - _elm_config = NULL; - - _config_load(); - + _elm_config_reload_do(); + /* restore prev value which is not part of the EET file */ _elm_config->is_mirrored = is_mirrored; _elm_config->translate = translate; @@ -4122,6 +4196,7 @@ _elm_config_reload(void) void _elm_config_engine_set(const char *engine) { + _elm_config->priv.engine = EINA_TRUE; eina_stringshare_replace(&(_elm_config->engine), engine); } @@ -4232,6 +4307,7 @@ _elm_config_accel_preference_parse(const char *pref, Eina_Stringshare **accel, EAPI void elm_config_accel_preference_set(const char *pref) { + _elm_config->priv.accel = EINA_TRUE; if (pref) { Eina_Bool hw; @@ -4299,6 +4375,7 @@ elm_config_transition_duration_factor_get(void) EAPI void elm_config_web_backend_set(const char *backend) { + _elm_config->priv.web_backend = EINA_TRUE; if (_elm_web_init(backend)) _elm_config->web_backend = backend; } @@ -4331,9 +4408,8 @@ _elm_config_profile_set(const char *profile) _elm_profile = strdup(profile); _color_overlays_cancel(); - _config_free(_elm_config); - _elm_config = NULL; - _config_load(); + + _elm_config_reload_do(); /* restore prev value which is not part of the EET file */ _elm_config->is_mirrored = is_mirrored; diff --git a/src/lib/elementary/elm_priv.h b/src/lib/elementary/elm_priv.h index f3168bbea3..7d2d02aa40 100644 --- a/src/lib/elementary/elm_priv.h +++ b/src/lib/elementary/elm_priv.h @@ -88,6 +88,7 @@ typedef struct _Elm_Theme_Files Elm_Theme_Files; typedef struct _Edje_Signal_Data Edje_Signal_Data; +typedef struct _Elm_Config_Flags Elm_Config_Flags; typedef struct _Elm_Config Elm_Config; typedef struct _Elm_Config_Bindings_Widget Elm_Config_Bindings_Widget; typedef struct _Elm_Config_Binding_Key Elm_Config_Binding_Key; @@ -187,6 +188,40 @@ extern const char *_elm_engines[]; #define ELM_PRIV_SMART_CALLBACKS_DESC(name, signal, type) \ {name, type}, +struct _Elm_Config_Flags +{ + Eina_Bool engine : 1; + Eina_Bool accel : 1; + Eina_Bool web_backend : 1; + Eina_Bool accel_override : 1; + Eina_Bool vsync : 1; + Eina_Bool thumbscroll_enable : 1; + Eina_Bool thumbscroll_threshold : 1; + Eina_Bool thumbscroll_hold_threshold : 1; + Eina_Bool thumbscroll_momentum_threshold : 1; + Eina_Bool thumbscroll_flick_distance_tolerance : 1; + Eina_Bool thumbscroll_friction : 1; + Eina_Bool thumbscroll_min_friction : 1; + Eina_Bool thumbscroll_friction_standard : 1; + Eina_Bool thumbscroll_bounce_friction : 1; + Eina_Bool thumbscroll_acceleration_threshold : 1; + Eina_Bool thumbscroll_acceleration_time_limit : 1; + Eina_Bool thumbscroll_acceleration_weight : 1; + Eina_Bool page_scroll_friction : 1; + Eina_Bool bring_in_scroll_friction : 1; + Eina_Bool zoom_friction : 1; + Eina_Bool scroll_animation_disable : 1; + Eina_Bool scroll_accel_factor : 1; + Eina_Bool thumbscroll_bounce_enable : 1; + Eina_Bool thumbscroll_border_friction : 1; + Eina_Bool thumbscroll_sensitivity_friction : 1; + Eina_Bool scroll_smooth_start_enable : 1; + Eina_Bool scroll_smooth_amount : 1; + Eina_Bool scroll_smooth_time_window : 1; + Eina_Bool scale : 1; + // ... +}; + struct _Elm_Config { int config_version; @@ -224,7 +259,7 @@ struct _Elm_Config double scale; int bgpixmap; int compositing; - Eina_List *font_dirs; + Eina_List *font_dirs; // priv flags for Elm_Config_Flags -> up to here... Eina_List *font_overlays; int font_hinting; int cache_flush_poll_interval; @@ -322,6 +357,8 @@ struct _Elm_Config /* Not part of the EET file */ Eina_Bool is_mirrored : 1; Eina_Bool translate : 1; + + Elm_Config_Flags priv; }; struct _Elm_Config_Bindings_Widget