finish out config menu

This commit is contained in:
Mike Blumenkrantz 2014-07-30 13:00:22 -04:00 committed by Mike Blumenkrantz
parent f87c66b44e
commit e66437ba07
4 changed files with 150 additions and 21 deletions

View File

@ -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);

View File

@ -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

View File

@ -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);

View File

@ -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;