discomfitor pushed a commit to branch master.

http://git.enlightenment.org/enlightenment/modules/desksanity.git/commit/?id=e66437ba07df9a04c7cb95b604e684517b538351

commit e66437ba07df9a04c7cb95b604e684517b538351
Author: Mike Blumenkrantz <[email protected]>
Date:   Wed Jul 30 13:00:22 2014 -0400

    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;
 

-- 


Reply via email to