From 747851dbe141e7d0d149aefef39da2b080094500 Mon Sep 17 00:00:00 2001 From: Mike Blumenkrantz Date: Mon, 4 Mar 2013 08:46:24 +0000 Subject: [PATCH] desk transition config dialogs FIXED(ish) and show comp effects --- src/bin/e_configure_option.c | 34 +++--- src/modules/conf_display/e_int_config_desks.c | 112 +++++++++++------- 2 files changed, 89 insertions(+), 57 deletions(-) diff --git a/src/bin/e_configure_option.c b/src/bin/e_configure_option.c index 0e71d554c..9f96fa324 100644 --- a/src/bin/e_configure_option.c +++ b/src/bin/e_configure_option.c @@ -946,23 +946,29 @@ _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/auto"); + grp = eina_stringshare_add("none"); + oi = e_configure_option_info_new(co, _("none"), grp); + oi->current = (*(Eina_Stringshare **)co->valptr == grp); + ret = eina_list_append(ret, oi); + EINA_LIST_FREE(l, grp) { - oi = e_configure_option_info_new(co, _(name[x]), (intptr_t *)(long)x); - oi->current = (*(int *)co->valptr == x); + char buf[1024]; + Eina_Stringshare *s; + + /* usable desk flip animations must have auto/ prefix */ + snprintf(buf, sizeof(buf), "auto/%s", grp); + s = eina_stringshare_add(buf); + oi = e_configure_option_info_new(co, _(grp), s); + oi->current = (*(Eina_Stringshare **)co->valptr == s); ret = eina_list_append(ret, oi); + eina_stringshare_del(grp); } return ret; } @@ -1821,8 +1827,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 860eb5dbc..abbd0158a 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; + 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,31 @@ _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/auto"); + if (!cfdata->comp_effects) return; + /* comp effects must be prefixed with "auto" or they won't work and things will break! */ + EINA_LIST_FOREACH(cfdata->comp_effects, l, grp) + { + Eina_Stringshare *g; + char buf[1024]; + + snprintf(buf, sizeof(buf), "auto/%s", grp); + g = eina_stringshare_add(buf); + eina_stringshare_del(grp); + eina_list_data_set(l, g); + } + cfdata->comp_effects = eina_list_prepend(cfdata->comp_effects, eina_stringshare_add("none")); + if (!e_util_strcmp(e_config->desk_flip_animate_type, "none")) return; + 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 +108,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--**/ @@ -92,17 +118,22 @@ static int _basic_apply_data(E_Config_Dialog *cfd __UNUSED__, E_Config_Dialog_Data *cfdata) { /* Actually take our cfdata settings and apply them in real life */ - const Eina_List *l, *ll, *lll; - E_Manager *man; - E_Container *con; - E_Zone *zone; + if ((cfdata->x != e_config->zone_desks_x_count) || + (cfdata->y != e_config->zone_desks_y_count)) + { + const Eina_List *l, *ll, *lll; + E_Manager *man; + E_Container *con; + E_Zone *zone; + EINA_LIST_FOREACH(e_manager_list(), l, man) + EINA_LIST_FOREACH(man->containers, ll, con) + EINA_LIST_FOREACH(con->zones, lll, zone) + e_zone_desk_count_set(zone, cfdata->x, cfdata->y); + } - EINA_LIST_FOREACH(e_manager_list(), l, man) - EINA_LIST_FOREACH(man->containers, ll, con) - 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 +162,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 +187,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 +238,22 @@ _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; + const char *pp; + + pp = strchr(s, '/'); + pp = pp ? pp + 1 : s; + p = strdupa(pp); + 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 +269,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); -}