[elm_colorselector]: merged from Opensource 2. config/slp updated with
[framework/uifw/elementary.git] / src / lib / elm_config.c
index f1246dc..b5895aa 100644 (file)
@@ -15,6 +15,9 @@ 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;
 
@@ -33,6 +36,10 @@ const char *_elm_engines[] = {
    "opengl_sdl",
    "buffer",
    "ews",
+   "opengl_cocoa",
+   "psl1ght",
+   "wayland_shm",
+   "wayland_egl",
    NULL
 };
 
@@ -254,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
@@ -267,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);
@@ -283,6 +333,7 @@ _desc_init(void)
    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_time_interval, T_DOUBLE);
    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);
@@ -316,9 +367,11 @@ _desc_init(void)
    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_enable, T_UCHAR);
    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_finger_enable, T_UCHAR);
    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);
@@ -327,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
@@ -349,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
@@ -408,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)
@@ -531,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];
 
@@ -550,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];
@@ -572,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;
 
@@ -697,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)
@@ -710,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);
@@ -736,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;
 }
 
@@ -749,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)
      {
@@ -835,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");
@@ -852,6 +994,7 @@ _config_load(void)
    _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_time_interval = 0.008;
    _elm_config->scroll_smooth_amount = 1.0;
    _elm_config->scroll_smooth_history_weight = 0.3;
    _elm_config->scroll_smooth_future_time = 0.0;
@@ -885,16 +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_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_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 *
@@ -1025,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;
      }
@@ -1159,6 +1308,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")))
@@ -1172,6 +1323,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")))
@@ -1186,6 +1342,12 @@ _env_get(void)
           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");
@@ -1234,6 +1396,8 @@ _env_get(void)
 
         _elm_config->thumbscroll_sensitivity_friction = friction;
      }
+   s = getenv("ELM_SCROLL_SMOOTH_TIME_INTERVAL");
+   if (s) _elm_config->scroll_smooth_time_interval = atof(s);
    s = getenv("ELM_SCROLL_SMOOTH_AMOUNT");
    if (s) _elm_config->scroll_smooth_amount = atof(s);
    s = getenv("ELM_SCROLL_SMOOTH_HISTORY_WEIGHT");
@@ -1302,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);
 
@@ -1374,18 +1536,565 @@ _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();
 }
 
+EAPI Eina_Bool
+elm_config_cursor_engine_only_get(void)
+{
+   return _elm_config->cursor_engine_only;
+}
+
+EAPI void
+elm_config_cursor_engine_only_set(Eina_Bool engine_only)
+{
+   engine_only = !!engine_only;
+   _elm_config->cursor_engine_only = engine_only;
+}
+
+EINA_DEPRECATED EAPI double
+elm_tooltip_delay_get(void)
+{
+   return elm_config_tooltip_delay_get();
+}
+
+EINA_DEPRECATED EAPI Eina_Bool
+elm_tooltip_delay_set(double delay)
+{
+   elm_config_tooltip_delay_set(delay);
+   return EINA_TRUE;
+}
+
+EAPI double
+elm_config_tooltip_delay_get(void)
+{
+   return _elm_config->tooltip_delay;
+}
+
+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()
 {
@@ -1414,6 +2123,11 @@ _elm_config_init(void)
    _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();
@@ -1428,7 +2142,8 @@ _elm_config_sub_shutdown(void)
    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
@@ -1444,7 +2159,8 @@ _elm_config_sub_init(void)
    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
@@ -1507,16 +2223,22 @@ _elm_config_engine_set(const char *engine)
    _elm_config->engine = eina_stringshare_add(engine);
 }
 
-void
-_elm_config_all_update(void)
+EAPI const char *
+elm_config_preferred_engine_get(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
+   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
@@ -1551,9 +2273,9 @@ _elm_config_shutdown(void)
    if (_prop_all_update_timer)
      {
         ecore_timer_del(_prop_all_update_timer);
+        _prop_all_update_timer = NULL;
         _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
@@ -1571,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);