Elementary: Add support for the PSL1GHT engine
[framework/uifw/elementary.git] / src / bin / config.c
index a513344..4fcdd13 100644 (file)
@@ -17,7 +17,7 @@ struct _Theme
    Eina_Bool   in_search_path;
 };
 
-static Theme *tsel = NULL;
+static const Eina_List *tsel = NULL;
 static Eina_List *themes = NULL;
 
 struct _Elm_Text_Class_Data
@@ -80,12 +80,14 @@ struct _Fonts_Data
        lb = elm_label_add(win);                                     \
        evas_object_size_hint_weight_set(lb, EVAS_HINT_EXPAND, 0.0); \
        evas_object_size_hint_align_set(lb, EVAS_HINT_FILL, 0.5);    \
-       elm_label_label_set(lb, label);                              \
-       elm_frame_content_set(pd, lb);                               \
+       elm_object_text_set(lb, label);                              \
+       elm_object_content_set(pd, lb);                               \
        evas_object_show(lb);                                        \
     }                                                               \
   while (0)
 
+static Evas_Object *main_win = NULL;
+
 static int quiet = 0;
 static int interactive = 1;
 
@@ -257,7 +259,7 @@ ts_change(void *data       __UNUSED__,
           void *event_info __UNUSED__)
 {
    Eina_Bool val = elm_check_state_get(obj);
-   Eina_Bool sb = elm_scroll_bounce_enabled_get();
+   Eina_Bool sb = elm_scroll_thumbscroll_enabled_get();
 
    if (val == sb) return;
    elm_scroll_thumbscroll_enabled_all_set(val);
@@ -362,6 +364,30 @@ tsbf_change(void *data       __UNUSED__,
 }
 
 static void
+tssf_round(void *data       __UNUSED__,
+           Evas_Object     *obj,
+           void *event_info __UNUSED__)
+{
+   double val = elm_slider_value_get(obj);
+   double v;
+
+   v = ((double)((int)(val * 20.0))) / 20.0;
+   if (v != val) elm_slider_value_set(obj, v);
+}
+
+static void
+tssf_change(void *data       __UNUSED__,
+            Evas_Object     *obj,
+            void *event_info __UNUSED__)
+{
+   double tssf = elm_scroll_thumbscroll_sensitivity_friction_get();
+   double val = elm_slider_value_get(obj);
+
+   if (tssf == val) return;
+   elm_scroll_thumbscroll_sensitivity_friction_all_set(val);
+}
+
+static void
 cf_enable(void *data,
           Evas_Object     *obj,
           void *event_info __UNUSED__)
@@ -550,15 +576,15 @@ _status_basic(Evas_Object *win,
 
    fr = elm_frame_add(win);
    evas_object_size_hint_weight_set(fr, 1.0, 1.0);
-   elm_frame_label_set(fr, "Information");
+   elm_object_text_set(fr, "Information");
    elm_box_pack_end(bx0, fr);
    evas_object_show(fr);
 
    lb = elm_label_add(win);
-   elm_label_label_set(lb,
+   elm_object_text_set(lb,
                        "Applying configuration change"
                        );
-   elm_frame_content_set(fr, lb);
+   elm_object_content_set(fr, lb);
    evas_object_show(lb);
 }
 
@@ -571,7 +597,7 @@ _status_config(Evas_Object *win,
    fr = elm_frame_add(win);
    evas_object_size_hint_weight_set(fr, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
    evas_object_size_hint_align_set(fr, EVAS_HINT_FILL, EVAS_HINT_FILL);
-   elm_frame_label_set(fr, "Sizing");
+   elm_object_text_set(fr, "Sizing");
    elm_box_pack_end(bx0, fr);
    evas_object_show(fr);
 
@@ -621,7 +647,7 @@ _status_config(Evas_Object *win,
    // FIXME: add theme selector (basic mode and advanced for fallbacks)
    // FIXME: save config
    // FIXME: profile selector / creator etc.
-   elm_frame_content_set(fr, bx);
+   elm_object_content_set(fr, bx);
    evas_object_show(bx);
 }
 
@@ -859,12 +885,11 @@ _font_overlay_change(void *data       __UNUSED__,
 }
 
 static void
-_profile_change_do(Evas_Object *win,
-                   const char  *profile)
+_config_display_update(Evas_Object *win)
 {
    int flush_interval, font_c, image_c, edje_file_c, edje_col_c, ts_threshould;
    double scale, s_bounce_friction, ts_momentum_threshold, ts_friction,
-          ts_border_friction, page_friction, bring_in_friction, zoom_friction;
+          ts_border_friction, ts_sensitivity_friction, page_friction, bring_in_friction, zoom_friction;
    const char *curr_theme, *curr_engine;
    const Eina_List *l_items, *l;
    Eina_Bool s_bounce, ts;
@@ -872,8 +897,6 @@ _profile_change_do(Evas_Object *win,
    Elm_Theme *th;
    int fs;
 
-   elm_profile_all_set(profile);
-
    scale = elm_scale_get();
    fs = elm_finger_size_get();
    flush_interval = elm_cache_flush_interval_get();
@@ -889,72 +912,76 @@ _profile_change_do(Evas_Object *win,
    ts_momentum_threshold = elm_scroll_thumbscroll_momentum_threshold_get();
    ts_friction = elm_scroll_thumbscroll_friction_get();
    ts_border_friction = elm_scroll_thumbscroll_border_friction_get();
+   ts_sensitivity_friction = elm_scroll_thumbscroll_sensitivity_friction_get();
    page_friction = elm_scroll_page_scroll_friction_get();
    bring_in_friction = elm_scroll_bring_in_scroll_friction_get();
    zoom_friction = elm_scroll_zoom_friction_get();
 
    /* gotta update root windows' atoms */
-   elm_scale_all_set(scale);
+//   elm_scale_all_set(scale);
    elm_slider_value_set(evas_object_data_get(win, "scale_slider"), scale);
-   elm_finger_size_all_set(fs);
+//   elm_finger_size_all_set(fs);
    elm_slider_value_set(evas_object_data_get(win, "fs_slider"), fs);
 
-   elm_cache_flush_interval_all_set(flush_interval);
+//   elm_cache_flush_interval_all_set(flush_interval);
    elm_slider_value_set(evas_object_data_get(win,
                                              "cache_flush_interval_slider"),
                         flush_interval);
-   elm_font_cache_all_set(font_c);
+//   elm_font_cache_all_set(font_c);
    elm_slider_value_set(evas_object_data_get(win, "font_cache_slider"),
                         font_c / 1024.0);
-   elm_image_cache_all_set(image_c);
+//   elm_image_cache_all_set(image_c);
    elm_slider_value_set(evas_object_data_get(win, "image_cache_slider"),
                         image_c / 1024.0);
-   elm_edje_file_cache_all_set(edje_file_c);
+//   elm_edje_file_cache_all_set(edje_file_c);
    elm_slider_value_set(evas_object_data_get(win, "edje_file_cache_slider"),
                         edje_file_c);
-   elm_edje_collection_cache_all_set(edje_col_c);
+//   elm_edje_collection_cache_all_set(edje_col_c);
    elm_slider_value_set(evas_object_data_get(win,
                                              "edje_collection_cache_slider"),
                         edje_col_c);
 
-   elm_scroll_bounce_enabled_all_set(s_bounce);
+//   elm_scroll_bounce_enabled_all_set(s_bounce);
    elm_check_state_set(evas_object_data_get(win, "scroll_bounce_check"),
                        s_bounce);
-   elm_scroll_bounce_friction_all_set(s_bounce_friction);
+//   elm_scroll_bounce_friction_all_set(s_bounce_friction);
    elm_slider_value_set(evas_object_data_get(win, "bounce_friction_slider"),
                         s_bounce_friction);
-   elm_scroll_thumbscroll_enabled_all_set(ts);
+//   elm_scroll_thumbscroll_enabled_all_set(ts);
    elm_check_state_set(evas_object_data_get(win, "thumbscroll_check"), ts);
-   elm_scroll_thumbscroll_threshold_all_set(ts_threshould);
+//   elm_scroll_thumbscroll_threshold_all_set(ts_threshould);
    elm_slider_value_set(evas_object_data_get(win,
                                              "thumbscroll_threshold_slider"),
                         ts_threshould);
-   elm_scroll_thumbscroll_momentum_threshold_all_set(ts_momentum_threshold);
+//   elm_scroll_thumbscroll_momentum_threshold_all_set(ts_momentum_threshold);
    elm_slider_value_set(evas_object_data_get(win,
                                              "ts_momentum_threshold_slider"),
                         ts_momentum_threshold);
-   elm_scroll_thumbscroll_friction_all_set(ts_friction);
+//   elm_scroll_thumbscroll_friction_all_set(ts_friction);
    elm_slider_value_set(evas_object_data_get(win,
                                              "thumbscroll_friction_slider"),
                         ts_friction);
-   elm_scroll_thumbscroll_border_friction_all_set(ts_border_friction);
+//   elm_scroll_thumbscroll_border_friction_all_set(ts_border_friction);
    elm_slider_value_set(evas_object_data_get(win, "ts_border_friction_slider"),
                         ts_border_friction);
-   elm_scroll_page_scroll_friction_all_set(page_friction);
+//   elm_scroll_thumbscroll_sensitivity_friction_all_set(ts_sensitivity_friction);
+   elm_slider_value_set(evas_object_data_get(win, "ts_sensitivity_friction_slider"),
+                        ts_sensitivity_friction);
+//   elm_scroll_page_scroll_friction_all_set(page_friction);
    elm_slider_value_set(evas_object_data_get(win,
                                              "page_scroll_friction_slider"),
                         page_friction);
-   elm_scroll_bring_in_scroll_friction_all_set(bring_in_friction);
+//   elm_scroll_bring_in_scroll_friction_all_set(bring_in_friction);
    elm_slider_value_set(evas_object_data_get(win,
                                              "bring_in_scroll_friction_slider"),
                         bring_in_friction);
-   elm_scroll_zoom_friction_all_set(zoom_friction);
+//   elm_scroll_zoom_friction_all_set(zoom_friction);
    elm_slider_value_set(evas_object_data_get(win,
                                              "zoom_scroll_friction_slider"),
                         zoom_friction);
 
    curr_theme = _elm_theme_current_get(elm_theme_get(NULL));
-   elm_theme_all_set(curr_theme);
+//   elm_theme_all_set(curr_theme);
 
    th = elm_theme_new();
    elm_theme_set(th, curr_theme);
@@ -975,6 +1002,24 @@ _profile_change_do(Evas_Object *win,
 }
 
 static void
+_profile_change_do(Evas_Object *win,
+                   const char  *profile)
+{
+   elm_profile_all_set(profile);
+   _config_display_update(win);
+}
+
+static Eina_Bool
+_config_all_changed(void *data,
+                    int ev_type __UNUSED__,
+                    void *ev __UNUSED__)
+{
+   Evas_Object *win = data;
+   _config_display_update(win);
+   return ECORE_CALLBACK_PASS_ON;
+}
+
+static void
 _engine_use(void            *data,
             Evas_Object *obj __UNUSED__,
             void *event_info __UNUSED__)
@@ -1014,7 +1059,6 @@ _profile_use(void            *data,
    if (!strcmp(profile, selection))
      return;
 
-   elm_config_save(); /* dump config into old profile's data dir */
    elm_profile_set(selection); /* just here to update info for getters below */
 
    _profile_change_do(elm_object_top_widget_get(li), selection);
@@ -1063,62 +1107,51 @@ _theme_use(void *data       __UNUSED__,
            void *event_info __UNUSED__)
 {
    const char *defth;
-   char *newth;
-   Theme *t = tsel;
-
-   if (!t) return;
-   defth = elm_theme_get(NULL);
-   newth = malloc(strlen(defth) + 1 + strlen(t->name) + 1);
-   if (newth)
-     {
-        char *rest;
+   Elm_Theme *th;
+   Evas_Object *win = elm_object_top_widget_get(obj);
+   Evas_Object *sample = evas_object_data_get(win, "theme_preview");
 
-        newth[0] = 0;
-        rest = strchr(defth, ':');
-        if (!rest)
-          strcpy(newth, t->name);
-        else
-          {
-             strcpy(newth, t->name);
-             strcat(newth, rest);
-          }
-        elm_theme_all_set(newth);
-        free(newth);
-     }
+   th = elm_object_theme_get(sample);
+   defth = elm_theme_get(th);
+   elm_theme_all_set(defth);
+   elm_config_save();
 }
 
 static void
-_theme_sel(void            *data,
+_theme_sel(void            *data __UNUSED__,
            Evas_Object     *obj,
            void *event_info __UNUSED__)
 {
-   Theme *t = data;
    Evas_Object *win = elm_object_top_widget_get(obj);
    Evas_Object *sample = evas_object_data_get(win, "theme_preview");
-   Elm_Theme *th;
+   Elm_Theme *th, *sth;
+   Elm_List_Item *it;
    const char *defth;
-   char *newth;
+   Eina_Strbuf *newth;
+   Eina_List *l;
 
-   tsel = t;
-   defth = elm_theme_get(NULL);
-   newth = malloc(strlen(defth) + 1 + strlen(t->name) + 1);
+   if (!sample) return;
+   tsel = elm_list_selected_items_get(obj);
+   sth = elm_object_theme_get(sample);
+   defth = elm_theme_get(sth);
+   newth = eina_strbuf_new();
+   EINA_SAFETY_ON_NULL_RETURN(newth);
    th = elm_theme_new();
-   if (newth)
+   if (!th)
      {
-        char *rest;
-
-        newth[0] = 0;
-        rest = strchr(defth, ':');
-        if (!rest)
-          strcpy(newth, t->name);
-        else
-          {
-             strcpy(newth, t->name);
-             strcat(newth, rest);
-          }
-        elm_theme_set(th, newth);
-        free(newth);
+        eina_strbuf_free(newth);
+        return;
+     }
+   EINA_LIST_REVERSE_FOREACH((Eina_List*)tsel, l, it)
+     {
+        Theme *t = elm_list_item_data_get(it);
+        eina_strbuf_append_printf(newth, "%s:", t->name);
+        if ((!l->prev) && strcmp(t->name, "default"))
+          /* ensure default theme is always there for fallback */
+          eina_strbuf_append(newth, "default");
      }
+   elm_theme_set(th, eina_strbuf_string_get(newth));
+   eina_strbuf_free(newth);
    elm_object_theme_set(sample, th);
    elm_theme_free(th);
 }
@@ -1201,25 +1234,29 @@ _sample_theme_new(Evas_Object *win)
    evas_object_show(bg);
 
    bt = elm_button_add(win);
-   elm_button_label_set(bt, "Button");
+   evas_object_size_hint_weight_set(bt, 1.0, 0.0);
+   elm_object_text_set(bt, "Button");
    elm_table_pack(base, bt, 0, 0, 1, 1);
    evas_object_show(bt);
 
    ck = elm_check_add(win);
-   elm_check_label_set(ck, "Check");
+   evas_object_size_hint_weight_set(ck, 1.0, 0.0);
+   elm_object_text_set(ck, "Check");
    elm_table_pack(base, ck, 0, 1, 1, 1);
    evas_object_show(ck);
 
    rd = elm_radio_add(win);
+   evas_object_size_hint_weight_set(rd, 1.0, 0.0);
    elm_radio_state_value_set(rd, 0);
-   elm_radio_label_set(rd, "Radio 1");
+   elm_object_text_set(rd, "Radio 1");
    elm_table_pack(base, rd, 1, 0, 1, 1);
    evas_object_show(rd);
    rdg = rd;
 
    rd = elm_radio_add(win);
+   evas_object_size_hint_weight_set(rd, 1.0, 0.0);
    elm_radio_state_value_set(rd, 1);
-   elm_radio_label_set(rd, "Radio 2");
+   elm_object_text_set(rd, "Radio 2");
    elm_radio_group_add(rd, rdg);
    elm_table_pack(base, rd, 1, 1, 1, 1);
    evas_object_show(rd);
@@ -1232,7 +1269,7 @@ _sample_theme_new(Evas_Object *win)
    evas_object_show(sp);
 
    sl = elm_slider_add(win);
-   elm_slider_label_set(sl, "Slider");
+   elm_object_text_set(sl, "Slider");
    elm_slider_span_size_set(sl, 120);
    elm_slider_min_max_set(sl, 1, 10);
    elm_slider_value_set(sl, 4);
@@ -1242,7 +1279,7 @@ _sample_theme_new(Evas_Object *win)
    evas_object_show(sl);
 
    fr = elm_frame_add(win);
-   elm_frame_label_set(fr, "Frame");
+   elm_object_text_set(fr, "Frame");
    elm_table_pack(base, fr, 0, 4, 2, 1);
    evas_object_size_hint_weight_set(fr, 1.0, 1.0);
    evas_object_size_hint_align_set(fr, EVAS_HINT_FILL, EVAS_HINT_FILL);
@@ -1251,7 +1288,7 @@ _sample_theme_new(Evas_Object *win)
    li = elm_list_add(win);
    evas_object_size_hint_weight_set(li, 1.0, 1.0);
    evas_object_size_hint_align_set(li, EVAS_HINT_FILL, EVAS_HINT_FILL);
-   elm_frame_content_set(fr, li);
+   elm_object_content_set(fr, li);
    evas_object_show(li);
 
    elm_list_item_append(li, "List Item 1", NULL, NULL, NULL, NULL);
@@ -1260,6 +1297,7 @@ _sample_theme_new(Evas_Object *win)
    elm_list_go(li);
 
    rc = evas_object_rectangle_add(evas_object_evas_get(win));
+   evas_object_size_hint_weight_set(rc, 1.0, 1.0);
    evas_object_size_hint_min_set(rc, 160, 120);
    elm_table_pack(base, rc, 0, 4, 2, 1);
 
@@ -1273,16 +1311,22 @@ _status_config_themes(Evas_Object *win,
    Evas_Object *tb, *rc, *sc, *sp, *li, *pd, *fr, *bt, *sample;
    Eina_List *list, *l;
    char *th, *s, *ext;
+   Elm_Theme *d;
+   Elm_List_Item *it, *def_it = NULL;
+   const char *theme_name, *sep[20];
+   unsigned int x;
 
    tb = elm_table_add(win);
    evas_object_size_hint_weight_set(tb, 1.0, 1.0);
    evas_object_size_hint_align_set(tb, EVAS_HINT_FILL, EVAS_HINT_FILL);
 
    rc = evas_object_rectangle_add(evas_object_evas_get(win));
+   evas_object_size_hint_weight_set(rc, 1.0, 1.0);
    evas_object_size_hint_min_set(rc, 0, 130);
    elm_table_pack(tb, rc, 0, 0, 1, 1);
 
    rc = evas_object_rectangle_add(evas_object_evas_get(win));
+   evas_object_size_hint_weight_set(rc, 1.0, 1.0);
    evas_object_size_hint_min_set(rc, 0, 200);
    elm_table_pack(tb, rc, 0, 1, 1, 1);
 
@@ -1296,15 +1340,24 @@ _status_config_themes(Evas_Object *win,
    evas_object_show(pd);
 
    li = elm_list_add(win);
+   elm_list_multi_select_set(li, EINA_TRUE);
    evas_object_size_hint_weight_set(li, 1.0, 1.0);
    evas_object_size_hint_align_set(li, EVAS_HINT_FILL, EVAS_HINT_FILL);
-   elm_frame_content_set(pd, li);
+   elm_object_content_set(pd, li);
    evas_object_show(li);
 
    list = elm_theme_name_available_list_new();
+   d = elm_theme_default_get();
+   theme_name = elm_theme_get(d);
+   for (x = 1, sep[0] = theme_name; x < sizeof(sep) / sizeof(sep[0]); x++)
+     {
+        sep[x] = strchr(sep[x - 1] + 1, ':');
+        if (!sep[x]) break;
+     }
    EINA_LIST_FOREACH(list, l, th)
      {
         Theme *t;
+        int y;
 
         t = calloc(1, sizeof(Theme));
         t->name = eina_stringshare_add(th);
@@ -1341,8 +1394,23 @@ _status_config_themes(Evas_Object *win,
                t->label = eina_stringshare_add(s);
           }
         themes = eina_list_append(themes, t);
-        elm_list_item_append(li, t->label, NULL, NULL, _theme_sel, t);
+        it = elm_list_item_append(li, t->label, NULL, NULL, NULL, t);
+        if (!strcmp(t->name, "default")) def_it = it;
+        for (y = x - 1 /* ignore default e theme */; y > 0; y--)
+          {
+             const char *start = (sep[y - 1][0] == ':') ? sep[y - 1] + 1 : sep[y - 1];
+             unsigned int len = (unsigned int)(sep[y] - start);
+             if (strncmp(start , t->name, len) || (strlen(t->name) != len)) continue;
+
+             if (!elm_list_item_selected_get(it))
+               elm_list_item_selected_set(it, EINA_TRUE);
+             break;
+          }
      }
+   if (!elm_list_selected_items_get(li))
+     elm_list_item_selected_set(def_it, EINA_TRUE);
+   evas_object_smart_callback_add(li, "selected", _theme_sel, NULL);
+   evas_object_smart_callback_add(li, "unselected", _theme_sel, NULL);
    elm_theme_name_available_list_free(list);
 
    elm_list_go(li);
@@ -1357,10 +1425,10 @@ _status_config_themes(Evas_Object *win,
    /* FIXME: not implemented yet
       bt = elm_button_add(win);
       evas_object_smart_callback_add(bt, "clicked", _theme_browse, win);
-      elm_button_label_set(bt, "Browse...");
+      elm_object_text_set(bt, "Browse...");
       evas_object_size_hint_weight_set(bt, 1.0, 1.0);
       evas_object_size_hint_align_set(bt, 0.9, 0.9);
-      elm_frame_content_set(pd, bt);
+      elm_object_content_set(pd, bt);
       evas_object_show(bt);
     */
    pd = elm_frame_add(win);
@@ -1371,21 +1439,21 @@ _status_config_themes(Evas_Object *win,
    evas_object_show(pd);
 
    fr = elm_frame_add(win);
-   elm_frame_label_set(fr, "Preview");
+   elm_object_text_set(fr, "Preview");
    evas_object_size_hint_weight_set(fr, 1.0, 1.0);
    evas_object_size_hint_align_set(fr, EVAS_HINT_FILL, EVAS_HINT_FILL);
-   elm_frame_content_set(pd, fr);
+   elm_object_content_set(pd, fr);
    evas_object_show(fr);
 
    sc = elm_scroller_add(win);
    elm_scroller_bounce_set(sc, 0, 0);
    evas_object_size_hint_weight_set(sc, 1.0, 1.0);
    evas_object_size_hint_align_set(sc, EVAS_HINT_FILL, EVAS_HINT_FILL);
-   elm_frame_content_set(fr, sc);
+   elm_object_content_set(fr, sc);
    evas_object_show(sc);
 
    sample = _sample_theme_new(win);
-   elm_scroller_content_set(sc, sample);
+   elm_object_content_set(sc, sample);
    evas_object_show(sample);
    evas_object_data_set(win, "theme_preview", sample);
 
@@ -1399,17 +1467,17 @@ _status_config_themes(Evas_Object *win,
 
    pd = elm_frame_add(win);
    elm_object_style_set(pd, "pad_medium");
-   evas_object_size_hint_weight_set(pd, 0.0, 0.0);
+   evas_object_size_hint_weight_set(pd, 1.0, 0.0);
    evas_object_size_hint_align_set(pd, 0.5, 0.5);
    elm_table_pack(tb, pd, 0, 3, 1, 1);
    evas_object_show(pd);
 
    bt = elm_button_add(win);
    evas_object_smart_callback_add(bt, "clicked", _theme_use, win);
-   elm_button_label_set(bt, "Use Theme");
-   evas_object_size_hint_weight_set(bt, 0.0, 0.0);
+   elm_object_text_set(bt, "Use Theme");
+   evas_object_size_hint_weight_set(bt, 1.0, 0.0);
    evas_object_size_hint_align_set(bt, 0.5, 0.5);
-   elm_frame_content_set(pd, bt);
+   elm_object_content_set(pd, bt);
    evas_object_show(bt);
 
    evas_object_data_set(win, "themes", tb);
@@ -1880,11 +1948,13 @@ _status_config_fonts(Evas_Object *win,
    /* yeah, dummy rectangles are ugly as hell, but no good way yet of
       fixing sizes */
    rc = evas_object_rectangle_add(evas_object_evas_get(win));
+   evas_object_size_hint_weight_set(rc, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+   evas_object_size_hint_align_set(rc, EVAS_HINT_FILL, EVAS_HINT_FILL);
    evas_object_size_hint_min_set(rc, 70, 170);
    elm_table_pack(base, rc, 1, 0, 1, 1);
 
    fr = elm_frame_add(win);
-   elm_frame_label_set(fr, "Font Class");
+   elm_object_text_set(fr, "Font Class");
    elm_table_pack(base, fr, 0, 0, 1, 2);
    evas_object_size_hint_weight_set(fr, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
    evas_object_size_hint_align_set(fr, EVAS_HINT_FILL, EVAS_HINT_FILL);
@@ -1894,14 +1964,14 @@ _status_config_fonts(Evas_Object *win,
    li = elm_list_add(win);
    evas_object_size_hint_weight_set(li, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
    evas_object_size_hint_align_set(li, EVAS_HINT_FILL, EVAS_HINT_FILL);
-   elm_frame_content_set(fr, li);
+   elm_object_content_set(fr, li);
    evas_object_show(li);
 
    evas_object_data_set(win, "font_classes_list", li);
    _font_classes_list_load(li);
 
    fr = elm_frame_add(win);
-   elm_frame_label_set(fr, "Font");
+   elm_object_text_set(fr, "Font");
    elm_table_pack(base, fr, 1, 0, 1, 2);
    evas_object_size_hint_weight_set(fr, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
    evas_object_size_hint_align_set(fr, EVAS_HINT_FILL, EVAS_HINT_FILL);
@@ -1910,7 +1980,7 @@ _status_config_fonts(Evas_Object *win,
    li = elm_list_add(win);
    evas_object_size_hint_weight_set(li, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
    evas_object_size_hint_align_set(li, EVAS_HINT_FILL, EVAS_HINT_FILL);
-   elm_frame_content_set(fr, li);
+   elm_object_content_set(fr, li);
    evas_object_show(li);
 
    evas_object_data_set(win, "font_names_list", li);
@@ -1918,11 +1988,13 @@ _status_config_fonts(Evas_Object *win,
    ELM_LIST_DISABLE(li);
 
    rc = evas_object_rectangle_add(evas_object_evas_get(win));
+   evas_object_size_hint_weight_set(rc, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+   evas_object_size_hint_align_set(rc, EVAS_HINT_FILL, EVAS_HINT_FILL);
    evas_object_size_hint_min_set(rc, 70, 130);
    elm_table_pack(base, rc, 1, 2, 1, 1);
 
    fr = elm_frame_add(win);
-   elm_frame_label_set(fr, "Style");
+   elm_object_text_set(fr, "Style");
    elm_table_pack(base, fr, 0, 2, 1, 1);
    evas_object_size_hint_weight_set(fr, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
    evas_object_size_hint_align_set(fr, EVAS_HINT_FILL, EVAS_HINT_FILL);
@@ -1932,7 +2004,7 @@ _status_config_fonts(Evas_Object *win,
    li = elm_list_add(win);
    evas_object_size_hint_weight_set(li, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
    evas_object_size_hint_align_set(li, EVAS_HINT_FILL, EVAS_HINT_FILL);
-   elm_frame_content_set(fr, li);
+   elm_object_content_set(fr, li);
    evas_object_show(li);
 
    evas_object_data_set(win, "font_styles_list", li);
@@ -1940,7 +2012,7 @@ _status_config_fonts(Evas_Object *win,
                                   NULL);
 
    fr = elm_frame_add(win);
-   elm_frame_label_set(fr, "Size");
+   elm_object_text_set(fr, "Size");
    elm_table_pack(base, fr, 1, 2, 1, 1);
    evas_object_size_hint_weight_set(fr, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
    evas_object_size_hint_align_set(fr, EVAS_HINT_FILL, EVAS_HINT_FILL);
@@ -1949,7 +2021,7 @@ _status_config_fonts(Evas_Object *win,
    li = elm_list_add(win);
    evas_object_size_hint_weight_set(li, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
    evas_object_size_hint_align_set(li, EVAS_HINT_FILL, EVAS_HINT_FILL);
-   elm_frame_content_set(fr, li);
+   elm_object_content_set(fr, li);
    evas_object_show(li);
 
    evas_object_data_set(win, "font_sizes_list", li);
@@ -1963,12 +2035,11 @@ _status_config_fonts(Evas_Object *win,
    evas_object_show(bx);
 
    /* FIXME: what to do here? dedicated widget? some new entry API set? */
-   snprintf(buf, sizeof(buf), "%s/objects/font_preview.edj", PACKAGE_DATA_DIR);
+   snprintf(buf, sizeof(buf), "%s/objects/font_preview.edj", elm_app_data_dir_get());
    preview = elm_layout_add(win);
    elm_layout_file_set(preview, buf, "font_preview");
-   elm_layout_text_set(preview, "elm.text", "Preview Text — 我真的会写中文");
-   evas_object_size_hint_weight_set(preview, EVAS_HINT_EXPAND,
-                                    EVAS_HINT_EXPAND);
+   elm_object_text_part_set(preview, "elm.text", "Preview Text — 我真的会写中文");
+   evas_object_size_hint_weight_set(preview, EVAS_HINT_EXPAND, 0.0);
    evas_object_size_hint_align_set(preview, EVAS_HINT_FILL, EVAS_HINT_FILL);
    evas_object_show(preview);
 
@@ -1985,7 +2056,7 @@ _status_config_fonts(Evas_Object *win,
 
    pd = elm_frame_add(win);
    elm_object_style_set(pd, "pad_medium");
-   evas_object_size_hint_weight_set(pd, 0.0, 0.0);
+   evas_object_size_hint_weight_set(pd, EVAS_HINT_EXPAND, 0.0);
    evas_object_size_hint_align_set(pd, 0.5, 0.5);
    elm_table_pack(base, pd, 0, 5, 2, 1);
    evas_object_show(pd);
@@ -1998,7 +2069,7 @@ _status_config_fonts(Evas_Object *win,
 
    bt = elm_button_add(win);
    evas_object_smart_callback_add(bt, "clicked", _font_overlay_set_all, win);
-   elm_button_label_set(bt, "Set to All");
+   elm_object_text_set(bt, "Set to All");
    evas_object_size_hint_weight_set(bt, 0.0, 0.0);
    evas_object_size_hint_align_set(bt, 0.5, 0.5);
    elm_box_pack_end(bx, bt);
@@ -2006,7 +2077,7 @@ _status_config_fonts(Evas_Object *win,
 
    bt = elm_button_add(win);
    evas_object_smart_callback_add(bt, "clicked", _font_overlay_reset, win);
-   elm_button_label_set(bt, "Reset");
+   elm_object_text_set(bt, "Reset");
    evas_object_size_hint_weight_set(bt, 0.0, 0.0);
    evas_object_size_hint_align_set(bt, 0.5, 0.5);
    elm_box_pack_end(bx, bt);
@@ -2014,7 +2085,7 @@ _status_config_fonts(Evas_Object *win,
 
    bt = elm_button_add(win);
    evas_object_smart_callback_add(bt, "clicked", _font_overlay_reset_all, win);
-   elm_button_label_set(bt, "Reset All");
+   elm_object_text_set(bt, "Reset All");
    evas_object_size_hint_weight_set(bt, 0.0, 0.0);
    evas_object_size_hint_align_set(bt, 0.5, 0.5);
    elm_box_pack_end(bx, bt);
@@ -2022,13 +2093,13 @@ _status_config_fonts(Evas_Object *win,
 
    bt = elm_button_add(win);
    evas_object_smart_callback_add(bt, "clicked", _font_overlay_change, win);
-   elm_button_label_set(bt, "Apply");
+   elm_object_text_set(bt, "Apply");
    evas_object_size_hint_weight_set(bt, 0.0, 0.0);
    evas_object_size_hint_align_set(bt, 0.5, 0.5);
    elm_box_pack_end(bx, bt);
    evas_object_show(bt);
 
-   elm_frame_content_set(pd, bx);
+   elm_object_content_set(pd, bx);
 
    evas_object_data_set(win, "fonts", base);
 
@@ -2073,12 +2144,21 @@ _profiles_list_selected_cb(void            *data,
    cur_profile = elm_profile_current_get();
    cur_selected = !strcmp(cur_profile, sel_profile);
 
-   pdir = elm_profile_dir_get(sel_profile, EINA_FALSE);
+   pdir = elm_profile_dir_get(sel_profile, EINA_TRUE);
+   if (!pdir) pdir = elm_profile_dir_get(sel_profile, EINA_FALSE);
 #ifdef ELM_EFREET
    snprintf(buf, sizeof(buf), "%s/profile.desktop", pdir);
    desk = efreet_desktop_new(buf);
    if ((desk) && (desk->name)) prof_name = desk->name;
    else
+     {
+        if (desk) efreet_desktop_free(desk);
+        pdir = elm_profile_dir_get(sel_profile, EINA_FALSE);
+        snprintf(buf, sizeof(buf), "%s/profile.desktop", pdir);
+        desk = efreet_desktop_new(buf);
+        if ((desk) && (desk->name)) prof_name = desk->name;
+        else prof_name = cur_profile;
+     }
 #endif
    prof_name = cur_profile;
 
@@ -2098,14 +2178,14 @@ _profiles_list_selected_cb(void            *data,
 
    snprintf(buf, sizeof(buf), "<hilight>Selected profile: %s</><br>",
             prof_name);
-   elm_label_label_set(evas_object_data_get(obj, "prof_name_lbl"), buf);
+   elm_object_text_set(evas_object_data_get(obj, "prof_name_lbl"), buf);
 
    en = evas_object_data_get(obj, "prof_desc_entry");
 #ifdef ELM_EFREET
-   if (desk) elm_scrolled_entry_entry_set(en, desk->comment);
+   if (desk) elm_entry_entry_set(en, desk->comment);
    else
 #endif
-   elm_scrolled_entry_entry_set(en, "Unknown");
+   elm_entry_entry_set(en, "Unknown");
 
 #ifdef ELM_EFREET
    if (desk) efreet_desktop_free(desk);
@@ -2138,13 +2218,23 @@ _profiles_list_fill(Evas_Object *l_widget,
         Elm_List_Item *it;
         Evas_Object *ic;
 
-        pdir = elm_profile_dir_get(profile, EINA_FALSE);
+        pdir = elm_profile_dir_get(profile, EINA_TRUE);
+        if (!pdir) pdir = elm_profile_dir_get(profile, EINA_FALSE);
         label = profile;
 
 #ifdef ELM_EFREET
         snprintf(buf, sizeof(buf), "%s/profile.desktop", pdir);
         desk = efreet_desktop_new(buf);
         if ((desk) && (desk->name)) label = desk->name;
+        else
+          {
+             if (desk) efreet_desktop_free(desk);
+             pdir = elm_profile_dir_get(profile, EINA_FALSE);
+             snprintf(buf, sizeof(buf), "%s/profile.desktop", pdir);
+             desk = efreet_desktop_new(buf);
+             if ((desk) && (desk->name)) label = desk->name;
+             else label = profile;
+          }
 #endif
 
         buf[0] = 0;
@@ -2213,7 +2303,7 @@ _status_config_profiles(Evas_Object *win,
    evas_object_size_hint_weight_set(fr_bx1, EVAS_HINT_EXPAND,
                                     EVAS_HINT_EXPAND);
    evas_object_size_hint_align_set(fr_bx1, EVAS_HINT_FILL, EVAS_HINT_FILL);
-   elm_box_homogenous_set(fr_bx1, EINA_TRUE);
+   elm_box_homogeneous_set(fr_bx1, EINA_TRUE);
    evas_object_show(fr_bx1);
 
    fr_bx2 = elm_box_add(win);
@@ -2223,10 +2313,10 @@ _status_config_profiles(Evas_Object *win,
    evas_object_show(fr_bx2);
 
    fr = elm_frame_add(win);
-   elm_frame_label_set(fr, "Available Profiles");
+   elm_object_text_set(fr, "Available Profiles");
    evas_object_size_hint_weight_set(fr, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
    evas_object_size_hint_align_set(fr, EVAS_HINT_FILL, EVAS_HINT_FILL);
-   elm_frame_content_set(fr, fr_bx1);
+   elm_object_content_set(fr, fr_bx1);
    elm_box_pack_end(bx, fr);
    evas_object_show(fr);
 
@@ -2247,8 +2337,9 @@ _status_config_profiles(Evas_Object *win,
 
    evas_object_show(lb);
 
-   en = elm_scrolled_entry_add(win);
-   elm_scrolled_entry_editable_set(en, EINA_FALSE);
+   en = elm_entry_add(win);
+   elm_entry_scrollable_set(en, EINA_TRUE);
+   elm_entry_editable_set(en, EINA_FALSE);
    evas_object_size_hint_weight_set(en, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
    evas_object_size_hint_align_set(en, EVAS_HINT_FILL, EVAS_HINT_FILL);
    evas_object_show(en);
@@ -2284,7 +2375,7 @@ _status_config_profiles(Evas_Object *win,
 
    bt = elm_button_add(win);
    evas_object_smart_callback_add(bt, "clicked", _profile_use, li);
-   elm_button_label_set(bt, "Use");
+   elm_object_text_set(bt, "Use");
    evas_object_size_hint_weight_set(bt, 0.0, 0.0);
    evas_object_size_hint_align_set(bt, 0.5, 0.5);
    elm_box_pack_end(btn_bx, bt);
@@ -2294,7 +2385,7 @@ _status_config_profiles(Evas_Object *win,
 
    bt = elm_button_add(win);
    evas_object_smart_callback_add(bt, "clicked", _btn_todo, NULL); /* TODO */
-   elm_button_label_set(bt, "Delete");
+   elm_object_text_set(bt, "Delete");
    evas_object_size_hint_weight_set(bt, 0.0, 0.0);
    evas_object_size_hint_align_set(bt, 0.5, 0.5);
    elm_box_pack_end(btn_bx, bt);
@@ -2304,7 +2395,7 @@ _status_config_profiles(Evas_Object *win,
 
    bt = elm_button_add(win);
    evas_object_smart_callback_add(bt, "clicked", _profile_reset, li);
-   elm_button_label_set(bt, "Reset");
+   elm_object_text_set(bt, "Reset");
    evas_object_size_hint_weight_set(bt, 0.0, 0.0);
    evas_object_size_hint_align_set(bt, 0.5, 0.5);
    elm_box_pack_end(btn_bx, bt);
@@ -2314,13 +2405,13 @@ _status_config_profiles(Evas_Object *win,
 
    bt = elm_button_add(win);
    evas_object_smart_callback_add(bt, "clicked", _btn_todo, NULL); /* TODO */
-   elm_button_label_set(bt, "Add new");
+   elm_object_text_set(bt, "Add new");
    evas_object_size_hint_weight_set(bt, 0.0, 0.0);
    evas_object_size_hint_align_set(bt, 0.5, 0.5);
    elm_box_pack_end(btn_bx, bt);
    evas_object_show(bt);
 
-   elm_frame_content_set(pd, btn_bx);
+   elm_object_content_set(pd, btn_bx);
 
    evas = evas_object_evas_get(li);
    evas_event_freeze(evas);
@@ -2352,13 +2443,13 @@ _status_config_scrolling(Evas_Object *win,
    evas_object_size_hint_align_set(sc, EVAS_HINT_FILL, EVAS_HINT_FILL);
    elm_scroller_bounce_set(sc, EINA_FALSE, EINA_TRUE);
    evas_object_show(sc);
-   elm_scroller_content_set(sc, bx);
+   elm_object_content_set(sc, bx);
 
    ck = elm_check_add(win);
    elm_object_tooltip_text_set(ck, "Set whether scrollers should bounce<br>"
                                    "when they reach their viewport's edge<br>"
                                    "during a scroll");
-   elm_check_label_set(ck, "Enable scroll bounce");
+   elm_object_text_set(ck, "Enable scroll bounce");
    evas_object_data_set(win, "scroll_bounce_check", ck);
    evas_object_size_hint_weight_set(ck, EVAS_HINT_EXPAND, 0.0);
    evas_object_size_hint_align_set(ck, EVAS_HINT_FILL, 0.5);
@@ -2397,7 +2488,7 @@ _status_config_scrolling(Evas_Object *win,
    ck = elm_check_add(win);
    elm_object_tooltip_text_set(ck, "Set whether scrollers should be<br>"
                                    "draggable from any point in their views");
-   elm_check_label_set(ck, "Enable thumb scroll");
+   elm_object_text_set(ck, "Enable thumb scroll");
    evas_object_data_set(win, "thumbscroll_check", ck);
    evas_object_size_hint_weight_set(ck, EVAS_HINT_EXPAND, 0.0);
    evas_object_size_hint_align_set(ck, EVAS_HINT_FILL, 0.5);
@@ -2491,6 +2582,26 @@ _status_config_scrolling(Evas_Object *win,
    evas_object_smart_callback_add(sl, "changed", tsbf_round, NULL);
    evas_object_smart_callback_add(sl, "delay,changed", tsbf_change, NULL);
 
+   LABEL_FRAME_ADD("<hilight>Thumb scroll sensitivity friction</>");
+
+   sl = elm_slider_add(win);
+   elm_object_tooltip_text_set(sl, "This is the sensitivity amount which<br>"
+                                   "is be multiplied by the length of mouse<br>"
+                                   "dragging.");
+   evas_object_data_set(win, "ts_sensitivity_friction_slider", sl);
+   evas_object_size_hint_weight_set(sl, EVAS_HINT_EXPAND, 0.0);
+   evas_object_size_hint_align_set(sl, EVAS_HINT_FILL, 0.5);
+   elm_slider_span_size_set(sl, 120);
+   elm_slider_unit_format_set(sl, "%1.2f");
+   elm_slider_indicator_format_set(sl, "%1.2f");
+   elm_slider_min_max_set(sl, 0.1, 1.0);
+   elm_slider_value_set(sl, elm_scroll_thumbscroll_sensitivity_friction_get());
+   elm_box_pack_end(bx, sl);
+   evas_object_show(sl);
+
+   evas_object_smart_callback_add(sl, "changed", tssf_round, NULL);
+   evas_object_smart_callback_add(sl, "delay,changed", tssf_change, NULL);
+
    sp = elm_separator_add(win);
    elm_separator_horizontal_set(sp, EINA_TRUE);
    evas_object_size_hint_weight_set(sp, EVAS_HINT_EXPAND, 0.0);
@@ -2598,6 +2709,9 @@ _elm_engine_supported(const char *engine)
       "sdl",
       "software_16_sdl",
       "opengl_sdl",
+      "ews",
+      "opengl_cocoa",
+      "psl1ght",
       NULL
    };
 
@@ -2662,14 +2776,14 @@ _status_config_rendering(Evas_Object *win,
    evas_object_size_hint_align_set(bx, EVAS_HINT_FILL, EVAS_HINT_FILL);
 
    fr = elm_frame_add(win);
-   elm_frame_label_set(fr, "Available Engines");
+   elm_object_text_set(fr, "Available Engines");
    evas_object_size_hint_weight_set(fr, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
    evas_object_size_hint_align_set(fr, EVAS_HINT_FILL, EVAS_HINT_FILL);
    elm_box_pack_end(bx, fr);
    evas_object_show(fr);
 
    li = elm_list_add(win);
-   elm_frame_content_set(fr, li);
+   elm_object_content_set(fr, li);
    evas_object_size_hint_weight_set(li, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
    evas_object_size_hint_align_set(li, EVAS_HINT_FILL, EVAS_HINT_FILL);
 
@@ -2697,10 +2811,10 @@ _status_config_rendering(Evas_Object *win,
 
    bt = elm_button_add(win);
    evas_object_smart_callback_add(bt, "clicked", _engine_use, li);
-   elm_button_label_set(bt, "Use Engine");
+   elm_object_text_set(bt, "Use Engine");
    evas_object_size_hint_weight_set(bt, 0.0, 0.0);
    evas_object_size_hint_align_set(bt, 0.5, 0.5);
-   elm_frame_content_set(pd, bt);
+   elm_object_content_set(pd, bt);
    evas_object_show(bt);
 
    evas_object_data_set(win, "rendering", bx);
@@ -2733,7 +2847,7 @@ _status_config_caches(Evas_Object *win,
    ck = elm_check_add(win);
    evas_object_size_hint_weight_set(ck, EVAS_HINT_EXPAND, 0.0);
    evas_object_size_hint_align_set(ck, EVAS_HINT_FILL, 0.5);
-   elm_check_label_set(ck, "Enable Flushing");
+   elm_object_text_set(ck, "Enable Flushing");
    elm_check_state_set(ck, elm_cache_flush_enabled_get());
    evas_object_smart_callback_add(ck, "changed", cf_enable, sl);
    elm_box_pack_end(bx, ck);
@@ -2855,7 +2969,7 @@ _status_config_full(Evas_Object *win,
 
    tb = elm_toolbar_add(win);
    elm_toolbar_menu_parent_set(tb, win);
-   elm_toolbar_homogenous_set(tb, 0);
+   elm_toolbar_homogeneous_set(tb, 0);
    evas_object_size_hint_weight_set(tb, 1.0, 0.0);
    evas_object_size_hint_align_set(tb, EVAS_HINT_FILL, EVAS_HINT_FILL);
 
@@ -2908,8 +3022,12 @@ status_win(void)
    Evas_Object *win, *bg, *bx0;
 
    win = elm_win_add(NULL, "main", ELM_WIN_BASIC);
+   main_win = win;
    elm_win_title_set(win, "Elementary Config");
 
+   ecore_event_handler_add(ELM_EVENT_CONFIG_ALL_CHANGED, _config_all_changed,
+                           win);
+
    evas_object_smart_callback_add(win, "delete,request", config_exit, NULL);
    bg = elm_bg_add(win);
    evas_object_size_hint_weight_set(bg, 1.0, 1.0);
@@ -2940,7 +3058,7 @@ _exit_timer(void *data __UNUSED__)
 /* this is your elementary main function - it MUST be called IMMEDIATELY
  * after elm_init() and MUST be passed argc and argv, and MUST be called
  * elm_main and not be static - must be a visible symbol with EAPI infront */
-EAPI int
+EAPI_MAIN int
 elm_main(int    argc,
          char **argv)
 {