From e66437ba07df9a04c7cb95b604e684517b538351 Mon Sep 17 00:00:00 2001 From: Mike Blumenkrantz Date: Wed, 30 Jul 2014 13:00:22 -0400 Subject: [PATCH] finish out config menu --- src/desksanity.c | 36 ++++++++++++------------ src/ds_config.c | 71 ++++++++++++++++++++++++++++++++++++++++++++++++ src/e_mod_main.c | 23 ++++++++++++++-- src/e_mod_main.h | 41 ++++++++++++++++++++++++++++ 4 files changed, 150 insertions(+), 21 deletions(-) diff --git a/src/desksanity.c b/src/desksanity.c index 0e03dbb..8e503ad 100644 --- a/src/desksanity.c +++ b/src/desksanity.c @@ -5,25 +5,6 @@ static Evas_Object *dm_show = NULL; static E_Desk *desk_hide = NULL; static Evas_Object *dm_hide = NULL; -typedef enum -{ - DS_PAN, //slide desk in direction of flip - DS_FADE_OUT, //current desk fades to transparent - DS_FADE_IN, //new desk fades in from transparent - DS_BATMAN, //adam west is calling - DS_ZOOM_IN, //zoom in to new desk - DS_ZOOM_OUT, //zoom out from old desk - DS_GROW, //grow the view of the new desk based on flip direction - DS_ROTATE_OUT, //spiral current desk out while shrinking - DS_ROTATE_IN, //spiral new desk in while growing - DS_SLIDE_SPLIT, //split screen in X parts and slide away based on flip direction - DS_QUAD_SPLIT, //split screen into quads and move towards corners - DS_QUAD_MERGE, //split screen into quads and move towards center - DS_BLINK, //like blinking your eye - DS_VIEWPORT, //current desk viewport shrinks towards 1x1 at center - DS_LAST, -} DS_Type; - static DS_Type cur_type = DS_PAN; static void @@ -82,6 +63,7 @@ _ds_show(E_Desk *desk, int dx, int dy) { E_Client *ec; DS_Type use_type; + DS_Type *disabled_types = (DS_Type*)&ds_config->types; /* free existing mirror */ E_FREE_FUNC(dm_show, evas_object_del); @@ -107,6 +89,11 @@ _ds_show(E_Desk *desk, int dx, int dy) ec->hidden = 0; evas_object_show(ec->frame); } + if (ds_config->disabled_transition_count == DS_LAST) + { + e_desk_flip_end(desk); + return; + } desk_show = desk; e_comp_shape_queue_block(e_comp_get(desk), 1); @@ -117,6 +104,16 @@ _ds_show(E_Desk *desk, int dx, int dy) use_type = cur_type++; else use_type = rand() % DS_LAST; + while (disabled_types[use_type]) + { + use_type++; + if (use_type == DS_LAST) + { + cur_type = DS_LAST; + use_type = DS_PAN; + } + } + /* pick a random flip */ switch (use_type) { @@ -408,6 +405,7 @@ _ds_hide(E_Desk *desk) ec->hidden = 1; evas_object_hide(ec->frame); } + if (ds_config->disabled_transition_count == DS_LAST) return; desk_hide = desk; /* create mirror for previous desk */ dm_hide = dm_add(desk); diff --git a/src/ds_config.c b/src/ds_config.c index 9f20345..b8134d7 100644 --- a/src/ds_config.c +++ b/src/ds_config.c @@ -3,6 +3,25 @@ static E_Int_Menu_Augmentation *maug = NULL; +static const char *type_desc[] = +{ + [DS_PAN] = D_("Pan"), + [DS_FADE_OUT] = D_("Fade Out"), + [DS_FADE_IN] = D_("Fade In"), + [DS_BATMAN] = D_("Batman"), + [DS_ZOOM_IN] = D_("Zoom In"), + [DS_ZOOM_OUT] = D_("Zoom Out"), + [DS_GROW] = D_("Grow"), + [DS_ROTATE_OUT] = D_("Rotate Out"), + [DS_ROTATE_IN] = D_("Rotate In"), + [DS_SLIDE_SPLIT] = D_("Slide Split"), + [DS_QUAD_SPLIT] = D_("Quad Split"), + [DS_QUAD_MERGE] = D_("Quad Merge"), + [DS_BLINK] = D_("Blink"), + [DS_VIEWPORT] = D_("Viewport"), + [DS_LAST] = NULL +}; + static void _ds_menu_ruler(void *data EINA_UNUSED, E_Menu *m EINA_UNUSED, E_Menu_Item *mi) { @@ -11,6 +30,7 @@ _ds_menu_ruler(void *data EINA_UNUSED, E_Menu *m EINA_UNUSED, E_Menu_Item *mi) mr_shutdown(); else mr_init(); + e_config_save_queue(); } static void @@ -21,6 +41,32 @@ _ds_menu_maximize(void *data EINA_UNUSED, E_Menu *m EINA_UNUSED, E_Menu_Item *mi maximize_shutdown(); else maximize_init(); + e_config_save_queue(); +} + +static void +_ds_menu_transitions(void *data EINA_UNUSED, E_Menu *m EINA_UNUSED, E_Menu_Item *mi) +{ + ds_config->disable_transitions = mi->toggle; + if (ds_config->disable_transitions) + ds_shutdown(); + else + ds_init(); + e_config_save_queue(); +} + +static void +_ds_menu_transition_type(void *data, E_Menu *m EINA_UNUSED, E_Menu_Item *mi) +{ + Eina_Bool *types = (Eina_Bool*)&ds_config->types; + unsigned int t = (uintptr_t)data; + + types[t] = mi->toggle; + if (mi->toggle) + ds_config->disabled_transition_count++; + else + ds_config->disabled_transition_count--; + e_config_save_queue(); } static void @@ -28,6 +74,7 @@ _ds_menu_add(void *data EINA_UNUSED, E_Menu *m) { E_Menu_Item *mi; E_Menu *subm; + unsigned int t; mi = e_menu_item_new(m); e_menu_item_label_set(mi, D_("Desksanity")); @@ -36,6 +83,7 @@ _ds_menu_add(void *data EINA_UNUSED, E_Menu *m) subm = e_menu_new(); e_menu_title_set(subm, D_("Options")); e_menu_item_submenu_set(mi, subm); + e_object_unref(E_OBJECT(subm)); mi = e_menu_item_new(subm); e_menu_item_label_set(mi, D_("Disable Move/Resize Ruler")); @@ -48,6 +96,29 @@ _ds_menu_add(void *data EINA_UNUSED, E_Menu *m) e_menu_item_check_set(mi, 1); e_menu_item_toggle_set(mi, ds_config->disable_maximize); e_menu_item_callback_set(mi, _ds_menu_maximize, NULL); + + mi = e_menu_item_new(subm); + e_menu_item_label_set(mi, D_("Disable Transition Effects")); + e_menu_item_check_set(mi, 1); + e_menu_item_toggle_set(mi, ds_config->disable_transitions); + e_menu_item_callback_set(mi, _ds_menu_transitions, NULL); + + if (ds_config->disable_transitions) return; + + subm = e_menu_new(); + e_menu_title_set(subm, D_("Transitions")); + e_menu_item_submenu_set(mi, subm); + e_object_unref(E_OBJECT(subm)); + + for (t = 0; t < DS_LAST; t++) + { + Eina_Bool *types = (Eina_Bool*)&ds_config->types; + mi = e_menu_item_new(subm); + e_menu_item_label_set(mi, type_desc[t]); + e_menu_item_check_set(mi, 1); + e_menu_item_toggle_set(mi, types[t]); + e_menu_item_callback_set(mi, _ds_menu_transition_type, (void*)(uintptr_t)t); + } } EINTERN void diff --git a/src/e_mod_main.c b/src/e_mod_main.c index ed0041c..90e661e 100644 --- a/src/e_mod_main.c +++ b/src/e_mod_main.c @@ -17,6 +17,23 @@ _e_mod_ds_config_load(void) E_CONFIG_VAL(D, T, config_version, UINT); E_CONFIG_VAL(D, T, disable_ruler, UCHAR); E_CONFIG_VAL(D, T, disable_maximize, UCHAR); + E_CONFIG_VAL(D, T, disable_transitions, UCHAR); + E_CONFIG_VAL(D, T, disabled_transition_count, UINT); + + E_CONFIG_VAL(D, T, types.disable_PAN, UCHAR); + E_CONFIG_VAL(D, T, types.disable_FADE_OUT, UCHAR); + E_CONFIG_VAL(D, T, types.disable_FADE_IN, UCHAR); + E_CONFIG_VAL(D, T, types.disable_BATMAN, UCHAR); + E_CONFIG_VAL(D, T, types.disable_ZOOM_IN, UCHAR); + E_CONFIG_VAL(D, T, types.disable_ZOOM_OUT, UCHAR); + E_CONFIG_VAL(D, T, types.disable_GROW, UCHAR); + E_CONFIG_VAL(D, T, types.disable_ROTATE_OUT, UCHAR); + E_CONFIG_VAL(D, T, types.disable_ROTATE_IN, UCHAR); + E_CONFIG_VAL(D, T, types.disable_SLIDE_SPLIT, UCHAR); + E_CONFIG_VAL(D, T, types.disable_QUAD_SPLIT, UCHAR); + E_CONFIG_VAL(D, T, types.disable_QUAD_MERGE, UCHAR); + E_CONFIG_VAL(D, T, types.disable_BLINK, UCHAR); + E_CONFIG_VAL(D, T, types.disable_VIEWPORT, UCHAR); ds_config = e_config_domain_load("module.desksanity", conf_edd); if (ds_config) @@ -49,7 +66,8 @@ e_modapi_init(E_Module *m) mod->edje_file = eina_stringshare_add(buf); ds_config_init(); - ds_init(); + if (!ds_config->disable_transitions) + ds_init(); if (!ds_config->disable_ruler) mr_init(); if (!ds_config->disable_maximize) @@ -65,7 +83,8 @@ e_modapi_shutdown(E_Module *m EINA_UNUSED) maximize_shutdown(); if (!ds_config->disable_ruler) mr_shutdown(); - ds_shutdown(); + if (!ds_config->disable_transitions) + ds_shutdown(); ds_config_shutdown(); e_config_domain_save("module.desksanity", conf_edd, ds_config); E_FREE(ds_config); diff --git a/src/e_mod_main.h b/src/e_mod_main.h index ab8f04b..dea970c 100644 --- a/src/e_mod_main.h +++ b/src/e_mod_main.h @@ -25,6 +25,25 @@ #define MOD_CONFIG_FILE_GENERATION 1 #define MOD_CONFIG_FILE_VERSION ((MOD_CONFIG_FILE_EPOCH * 1000000) + MOD_CONFIG_FILE_GENERATION) +typedef enum +{ + DS_PAN, //slide desk in direction of flip + DS_FADE_OUT, //current desk fades to transparent + DS_FADE_IN, //new desk fades in from transparent + DS_BATMAN, //adam west is calling + DS_ZOOM_IN, //zoom in to new desk + DS_ZOOM_OUT, //zoom out from old desk + DS_GROW, //grow the view of the new desk based on flip direction + DS_ROTATE_OUT, //spiral current desk out while shrinking + DS_ROTATE_IN, //spiral new desk in while growing + DS_SLIDE_SPLIT, //split screen in X parts and slide away based on flip direction + DS_QUAD_SPLIT, //split screen into quads and move towards corners + DS_QUAD_MERGE, //split screen into quads and move towards center + DS_BLINK, //like blinking your eye + DS_VIEWPORT, //current desk viewport shrinks towards 1x1 at center + DS_LAST, +} DS_Type; + typedef struct Mod { E_Config_Dialog *cfd; @@ -32,13 +51,35 @@ typedef struct Mod Eina_Stringshare *edje_file; } Mod; +typedef struct Config_Types +{ + Eina_Bool disable_PAN; + Eina_Bool disable_FADE_OUT; + Eina_Bool disable_FADE_IN; + Eina_Bool disable_BATMAN; + Eina_Bool disable_ZOOM_IN; + Eina_Bool disable_ZOOM_OUT; + Eina_Bool disable_GROW; + Eina_Bool disable_ROTATE_OUT; + Eina_Bool disable_ROTATE_IN; + Eina_Bool disable_SLIDE_SPLIT; + Eina_Bool disable_QUAD_SPLIT; + Eina_Bool disable_QUAD_MERGE; + Eina_Bool disable_BLINK; + Eina_Bool disable_VIEWPORT; +} Config_Types; + typedef struct Config { unsigned int config_version; Eina_Bool disable_ruler; Eina_Bool disable_maximize; + Eina_Bool disable_transitions; + unsigned int disabled_transition_count; + Config_Types types; } Config; + extern Mod *mod; extern Config *ds_config;