discomfitor pushed a commit to branch devs/discomfitor/comp-border.

commit c9d41490ed1ba216f01a160c6cba9519145e01ca
Author: Mike Blumenkrantz <[email protected]>
Date:   Mon Mar 4 08:46:24 2013 +0000

    fix desk transition config dialogs
---
 src/bin/e_configure_option.c                  | 23 +++-----
 src/modules/conf_display/e_int_config_desks.c | 85 ++++++++++++++++-----------
 2 files changed, 60 insertions(+), 48 deletions(-)

diff --git a/src/bin/e_configure_option.c b/src/bin/e_configure_option.c
index 30cf4ed..7f7cf79 100644
--- a/src/bin/e_configure_option.c
+++ b/src/bin/e_configure_option.c
@@ -946,22 +946,17 @@ 
_e_configure_clientlist_separate_iconified_apps_info_cb(E_Configure_Option *co)
 }
 
 static Eina_List *
-_e_configure_desk_flip_animate_mode_info_cb(E_Configure_Option *co)
+_e_configure_desk_flip_animate_type_info_cb(E_Configure_Option *co)
 {
-   Eina_List *ret = NULL;
+   Eina_List *l, *ret = NULL;
    E_Configure_Option_Info *oi;
-   int x;
-   const char *name[] =
-   {
-      "No animation",
-      "Pane",
-      "Zoom"
-   };
+   Eina_Stringshare *grp;
 
-   for (x = 0; x <= E_DESKFLIP_ANIMATION_MODE_ZOOM; x++)
+   l = e_theme_collection_items_find("base/theme/borders", "e/comp/effects");
+   EINA_LIST_FREE(l, grp)
      {
-        oi = e_configure_option_info_new(co, _(name[x]), (intptr_t *)(long)x);
-        oi->current = (*(int *)co->valptr == x);
+        oi = e_configure_option_info_new(co, _(grp), grp);
+        oi->current = (*(Eina_Stringshare **)co->valptr == grp);
         ret = eina_list_append(ret, oi);
      }
    return ret;
@@ -1821,8 +1816,8 @@ e_configure_option_init(void)
    OPT_ADD(BOOL, fullscreen_flip, _("Enable desk flipping with fullscreen 
windows"), _("vdesk"), _("flip"), _("edge"), _("fullscreen"));
    OPT_ADD(BOOL, multiscreen_flip, _("Enable desk flipping with multiple 
monitors (DANGEROUS)"), _("vdesk"), _("flip"), _("edge"), _("screen"));
 
-   OPT_ADD(ENUM, desk_flip_animate_mode, _("Desk flip animation type"), 
_("vdesk"), _("animate"), _("flip")); //enum
-   co->info_cb = _e_configure_desk_flip_animate_mode_info_cb;
+   OPT_ADD(STR, desk_flip_animate_type, _("Desk flip animation type"), 
_("vdesk"), _("animate"), _("flip")); //str
+   co->info_cb = _e_configure_desk_flip_animate_type_info_cb;
    OPT_ICON("preferences-desktop");
    //OPT_ADD(INT, desk_flip_animate_interpolation, _("vdesk"), _("animate"), 
_("flip")); //NOT USED?
 
diff --git a/src/modules/conf_display/e_int_config_desks.c 
b/src/modules/conf_display/e_int_config_desks.c
index 860eb5d..b6c5dad 100644
--- a/src/modules/conf_display/e_int_config_desks.c
+++ b/src/modules/conf_display/e_int_config_desks.c
@@ -7,7 +7,6 @@ static int _basic_apply_data(E_Config_Dialog *cfd, 
E_Config_Dialog_Data *cfdata)
 static int _basic_check_changed(E_Config_Dialog *cfd, E_Config_Dialog_Data 
*cfdata);
 static Evas_Object *_basic_create_widgets(E_Config_Dialog *cfd, Evas *evas, 
E_Config_Dialog_Data *cfdata);
 static void _cb_slider_change(void *data, Evas_Object *obj);
-static void _cb_disable_flip_anim(void *data, Evas_Object *obj);
 
 /* Actual config data we will be playing with whil the dialog is active */
 struct _E_Config_Dialog_Data
@@ -23,9 +22,10 @@ struct _E_Config_Dialog_Data
    int flip_mode;
    int flip_interp;
 
+   Eina_List *comp_effects;
+
    /*- GUI -*/
    Evas_Object *preview;
-   Eina_List *flip_anim_list;
 };
 
 /* a nice easy setup function that does the dirty work */
@@ -58,6 +58,9 @@ e_int_config_desks(E_Container *con, const char *params 
__UNUSED__)
 static void
 _fill_data(E_Config_Dialog_Data *cfdata)
 {
+   Eina_List *l, *ll;
+   Eina_Stringshare *grp;
+
    cfdata->x = e_config->zone_desks_x_count;
    cfdata->y = e_config->zone_desks_y_count;
    cfdata->edge_flip_dragging = e_config->edge_flip_dragging;
@@ -65,8 +68,28 @@ _fill_data(E_Config_Dialog_Data *cfdata)
 #if (ECORE_VERSION_MAJOR > 1) || (ECORE_VERSION_MINOR >= 8)
    cfdata->use_desktop_window_profile = e_config->use_desktop_window_profile;
 #endif
-   cfdata->flip_mode = e_config->desk_flip_animate_mode;
    cfdata->flip_interp = e_config->desk_flip_animate_interpolation;
+
+   cfdata->flip_mode = 0;
+   cfdata->comp_effects = e_theme_collection_items_find("base/theme/borders", 
"e/comp/effects");
+   if (!cfdata->comp_effects) return;
+   EINA_LIST_FOREACH_SAFE(cfdata->comp_effects, l, ll, grp)
+     {
+        if (!e_util_strcmp(grp, "none"))
+          {
+             cfdata->comp_effects = 
eina_list_promote_list(cfdata->comp_effects, l);
+             if ((!e_config->desk_flip_animate_type) || (grp == 
e_config->desk_flip_animate_type))
+               return;
+             break;
+          }
+     }
+   EINA_LIST_FOREACH(cfdata->comp_effects->next, l, grp)
+     {
+        cfdata->flip_mode++;
+        if (grp == e_config->desk_flip_animate_type)
+          return;
+     }
+   cfdata->flip_mode = 0; // not found
 }
 
 static void *
@@ -82,8 +105,8 @@ _create_data(E_Config_Dialog *cfd __UNUSED__)
 static void
 _free_data(E_Config_Dialog *cfd __UNUSED__, E_Config_Dialog_Data *cfdata)
 {
-   eina_list_free(cfdata->flip_anim_list);
-   E_FREE(cfdata);
+   E_FREE_LIST(cfdata->comp_effects, eina_stringshare_del);
+   free(cfdata);
 }
 
 /**--APPLY--**/
@@ -102,7 +125,9 @@ _basic_apply_data(E_Config_Dialog *cfd __UNUSED__, 
E_Config_Dialog_Data *cfdata)
        EINA_LIST_FOREACH(con->zones, lll, zone)
          e_zone_desk_count_set(zone, cfdata->x, cfdata->y);
 
-   e_config->desk_flip_animate_mode = cfdata->flip_mode;
+   eina_stringshare_replace(&e_config->desk_flip_animate_type, NULL);
+   if (cfdata->flip_mode)
+     e_config->desk_flip_animate_type = 
eina_stringshare_ref(eina_list_nth(cfdata->comp_effects, cfdata->flip_mode));
    e_config->desk_flip_animate_interpolation = cfdata->flip_interp;
    
    e_config->edge_flip_dragging = cfdata->edge_flip_dragging;
@@ -131,14 +156,14 @@ _basic_check_changed(E_Config_Dialog *cfd __UNUSED__, 
E_Config_Dialog_Data *cfda
      EINA_LIST_FOREACH(man->containers, ll, con)
        EINA_LIST_FOREACH(con->zones, lll, zone)
          {
-           int x, y;
+            int x, y;
 
-           e_zone_desk_count_get(zone, &x, &y);
-           if ((x != cfdata->x) || (y != cfdata->y))
-             return 1;
-        }
+            e_zone_desk_count_get(zone, &x, &y);
+            if ((x != cfdata->x) || (y != cfdata->y))
+            return 1;
+         }
 
-   return ((e_config->desk_flip_animate_mode != cfdata->flip_mode) ||
+   return ((e_util_strcasecmp(eina_list_nth(cfdata->comp_effects, 
cfdata->flip_mode), e_config->desk_flip_animate_type)) ||
           (e_config->desk_flip_animate_interpolation != cfdata->flip_interp) ||
           (e_config->edge_flip_dragging != cfdata->edge_flip_dragging) ||
           (e_config->desk_flip_wrap != cfdata->flip_wrap)
@@ -156,6 +181,9 @@ _basic_create_widgets(E_Config_Dialog *cfd __UNUSED__, Evas 
*evas, E_Config_Dial
    /* generate the core widget layout for a basic dialog */
    Evas_Object *o, *ob, *of, *otb;
    E_Radio_Group *rg;
+   Eina_List *l;
+   Eina_Stringshare *s;
+   int mode = 0;
 
    otb = e_widget_toolbook_add(evas, (48 * e_scale), (48 * e_scale));
    
@@ -204,18 +232,19 @@ _basic_create_widgets(E_Config_Dialog *cfd __UNUSED__, 
Evas *evas, E_Config_Dial
    e_widget_toolbook_page_append(otb, NULL, _("Desktops"), o, 1, 1, 1, 1, 
                                  0.5, 0.0);
 
+   /* FIXME: this could maybe be some sort of demo list like comp config? */
    o = e_widget_list_add(evas, 0, 0);
    rg = e_widget_radio_group_new(&(cfdata->flip_mode));
-   ob = e_widget_radio_add(evas, _("Off"), 0, rg);
-   e_widget_on_change_hook_set(ob, _cb_disable_flip_anim, cfdata);
-   e_widget_list_object_append(o, ob, 1, 0, 0.5);
-   ob = e_widget_radio_add(evas, _("Pane"), 1, rg);
-   e_widget_on_change_hook_set(ob, _cb_disable_flip_anim, cfdata);
-   e_widget_list_object_append(o, ob, 1, 0, 0.5);
-   ob = e_widget_radio_add(evas, _("Zoom"), 2, rg);
-   e_widget_on_change_hook_set(ob, _cb_disable_flip_anim, cfdata);
-   e_widget_list_object_append(o, ob, 1, 0, 0.5);
-   
+   EINA_LIST_FOREACH(cfdata->comp_effects, l, s)
+     {
+        char *p;
+
+        p = strdupa(s);
+        p[0] = toupper(p[0]);
+        ob = e_widget_radio_add(evas, _(p), mode, rg);
+        e_widget_list_object_append(o, ob, 1, 0, 0.5);
+        mode++;
+     }
    e_widget_toolbook_page_append(otb, NULL, _("Flip Animation"), o, 
                                  1, 0, 1, 0, 0.5, 0.0);
 
@@ -231,15 +260,3 @@ _cb_slider_change(void *data, Evas_Object *obj __UNUSED__)
 
    e_widget_deskpreview_num_desks_set(cfdata->preview, cfdata->x, cfdata->y);
 }
-
-static void
-_cb_disable_flip_anim(void *data, Evas_Object *obj __UNUSED__)
-{
-   E_Config_Dialog_Data *cfdata = (E_Config_Dialog_Data*) data;
-   Eina_List *list = cfdata->flip_anim_list;
-   Eina_List *l;
-   Evas_Object *o;
-
-   EINA_LIST_FOREACH(list, l, o)
-     e_widget_disabled_set(o, !cfdata->flip_mode);
-}

-- 

------------------------------------------------------------------------------
Symantec Endpoint Protection 12 positioned as A LEADER in The Forrester  
Wave(TM): Endpoint Security, Q1 2013 and "remains a good choice" in the  
endpoint security space. For insight on selecting the right partner to 
tackle endpoint security challenges, access the full report. 
http://p.sf.net/sfu/symantec-dev2dev

Reply via email to