forked from enlightenment/enlightenment
add an option to automatically re-maximize windows on shelf hide/show, and move away windows that are on top of the shelf away while the shelf is visible.
add more options to fine-tune the autohide in the shelf's config dialog. it needs some UI love though. SVN revision: 29472
This commit is contained in:
parent
560610403c
commit
1157a68929
|
@ -175,7 +175,7 @@ e_border_init(void)
|
||||||
handlers = evas_list_append(handlers, ecore_event_handler_add(EFREET_EVENT_DESKTOP_CHANGE, _e_border_cb_efreet_desktop_change, NULL));
|
handlers = evas_list_append(handlers, ecore_event_handler_add(EFREET_EVENT_DESKTOP_CHANGE, _e_border_cb_efreet_desktop_change, NULL));
|
||||||
|
|
||||||
handlers = evas_list_append(handlers, ecore_event_handler_add(E_EVENT_CONFIG_ICON_THEME, _e_border_cb_config_icon_theme, NULL));
|
handlers = evas_list_append(handlers, ecore_event_handler_add(E_EVENT_CONFIG_ICON_THEME, _e_border_cb_config_icon_theme, NULL));
|
||||||
|
|
||||||
E_EVENT_BORDER_ADD = ecore_event_type_new();
|
E_EVENT_BORDER_ADD = ecore_event_type_new();
|
||||||
E_EVENT_BORDER_REMOVE = ecore_event_type_new();
|
E_EVENT_BORDER_REMOVE = ecore_event_type_new();
|
||||||
E_EVENT_BORDER_DESK_SET = ecore_event_type_new();
|
E_EVENT_BORDER_DESK_SET = ecore_event_type_new();
|
||||||
|
@ -4743,6 +4743,9 @@ _e_border_cb_mouse_move(void *data, int type, void *event)
|
||||||
x, y, bd->w, bd->h,
|
x, y, bd->w, bd->h,
|
||||||
&new_x, &new_y, &new_w, &new_h);
|
&new_x, &new_y, &new_w, &new_h);
|
||||||
evas_list_free(skiplist);
|
evas_list_free(skiplist);
|
||||||
|
bd->shelf_fix.x = 0;
|
||||||
|
bd->shelf_fix.y = 0;
|
||||||
|
bd->shelf_fix.modified = 0;
|
||||||
e_border_move(bd, new_x, new_y);
|
e_border_move(bd, new_x, new_y);
|
||||||
e_zone_flip_coords_handle(bd->zone, ev->root.x, ev->root.y);
|
e_zone_flip_coords_handle(bd->zone, ev->root.x, ev->root.y);
|
||||||
}
|
}
|
||||||
|
|
|
@ -408,6 +408,11 @@ struct _E_Border
|
||||||
Ecore_Animator *anim;
|
Ecore_Animator *anim;
|
||||||
} shade;
|
} shade;
|
||||||
|
|
||||||
|
struct {
|
||||||
|
int x, y;
|
||||||
|
int modified;
|
||||||
|
} shelf_fix;
|
||||||
|
|
||||||
Evas_List *stick_desks;
|
Evas_List *stick_desks;
|
||||||
E_Menu *border_menu;
|
E_Menu *border_menu;
|
||||||
E_Config_Dialog *border_locks_dialog;
|
E_Config_Dialog *border_locks_dialog;
|
||||||
|
@ -636,7 +641,7 @@ EAPI int e_border_resizing_get(E_Border *bd);
|
||||||
EAPI void e_border_signal_resize_begin(E_Border *bd, const char *dir, const char *sig, const char *src);
|
EAPI void e_border_signal_resize_begin(E_Border *bd, const char *dir, const char *sig, const char *src);
|
||||||
EAPI void e_border_signal_resize_end(E_Border *bd, const char *dir, const char *sig, const char *src);
|
EAPI void e_border_signal_resize_end(E_Border *bd, const char *dir, const char *sig, const char *src);
|
||||||
EAPI void e_border_resize_limit(E_Border *bd, int *w, int *h);
|
EAPI void e_border_resize_limit(E_Border *bd, int *w, int *h);
|
||||||
|
|
||||||
extern EAPI int E_EVENT_BORDER_RESIZE;
|
extern EAPI int E_EVENT_BORDER_RESIZE;
|
||||||
extern EAPI int E_EVENT_BORDER_MOVE;
|
extern EAPI int E_EVENT_BORDER_MOVE;
|
||||||
extern EAPI int E_EVENT_BORDER_ADD;
|
extern EAPI int E_EVENT_BORDER_ADD;
|
||||||
|
|
|
@ -126,6 +126,8 @@ e_config_init(void)
|
||||||
E_CONFIG_VAL(D, T, size, INT);
|
E_CONFIG_VAL(D, T, size, INT);
|
||||||
E_CONFIG_VAL(D, T, overlap, INT);
|
E_CONFIG_VAL(D, T, overlap, INT);
|
||||||
E_CONFIG_VAL(D, T, autohide, INT);
|
E_CONFIG_VAL(D, T, autohide, INT);
|
||||||
|
E_CONFIG_VAL(D, T, hide_timeout, FLOAT);
|
||||||
|
E_CONFIG_VAL(D, T, hide_duration, FLOAT);
|
||||||
|
|
||||||
_e_config_desktop_bg_edd = E_CONFIG_DD_NEW("E_Config_Desktop_Background", E_Config_Desktop_Background);
|
_e_config_desktop_bg_edd = E_CONFIG_DD_NEW("E_Config_Desktop_Background", E_Config_Desktop_Background);
|
||||||
#undef T
|
#undef T
|
||||||
|
@ -425,6 +427,7 @@ e_config_init(void)
|
||||||
E_CONFIG_VAL(D, T, winlist_pos_max_h, INT); /**/
|
E_CONFIG_VAL(D, T, winlist_pos_max_h, INT); /**/
|
||||||
E_CONFIG_VAL(D, T, maximize_policy, INT); /**/
|
E_CONFIG_VAL(D, T, maximize_policy, INT); /**/
|
||||||
E_CONFIG_VAL(D, T, allow_manip, INT); /**/
|
E_CONFIG_VAL(D, T, allow_manip, INT); /**/
|
||||||
|
E_CONFIG_VAL(D, T, border_fix_on_shelf_toggle, INT); /**/
|
||||||
E_CONFIG_VAL(D, T, kill_if_close_not_possible, INT); /**/
|
E_CONFIG_VAL(D, T, kill_if_close_not_possible, INT); /**/
|
||||||
E_CONFIG_VAL(D, T, kill_process, INT); /**/
|
E_CONFIG_VAL(D, T, kill_process, INT); /**/
|
||||||
E_CONFIG_VAL(D, T, kill_timer_wait, DOUBLE); /**/
|
E_CONFIG_VAL(D, T, kill_timer_wait, DOUBLE); /**/
|
||||||
|
@ -659,6 +662,7 @@ e_config_init(void)
|
||||||
e_config->winlist_pos_max_h = 320;
|
e_config->winlist_pos_max_h = 320;
|
||||||
e_config->maximize_policy = E_MAXIMIZE_SMART | E_MAXIMIZE_BOTH;
|
e_config->maximize_policy = E_MAXIMIZE_SMART | E_MAXIMIZE_BOTH;
|
||||||
e_config->allow_manip = 0;
|
e_config->allow_manip = 0;
|
||||||
|
e_config->border_fix_on_shelf_toggle = 0;
|
||||||
e_config->kill_if_close_not_possible = 1;
|
e_config->kill_if_close_not_possible = 1;
|
||||||
e_config->kill_process = 1;
|
e_config->kill_process = 1;
|
||||||
e_config->kill_timer_wait = 10.0;
|
e_config->kill_timer_wait = 10.0;
|
||||||
|
@ -1151,7 +1155,7 @@ e_config_init(void)
|
||||||
{
|
{
|
||||||
E_Config_Shelf *cf_es;
|
E_Config_Shelf *cf_es;
|
||||||
|
|
||||||
#define CFG_SHELF(_name, _con, _zone, _pop, _lay, _orient, _fita, _fits, _style, _size, _overlap, _autohide) \
|
#define CFG_SHELF(_name, _con, _zone, _pop, _lay, _orient, _fita, _fits, _style, _size, _overlap, _autohide, _hide_timeout, _hide_duration) \
|
||||||
cf_es = E_NEW(E_Config_Shelf, 1); \
|
cf_es = E_NEW(E_Config_Shelf, 1); \
|
||||||
cf_es->name = evas_stringshare_add(_name); \
|
cf_es->name = evas_stringshare_add(_name); \
|
||||||
cf_es->container = _con; \
|
cf_es->container = _con; \
|
||||||
|
@ -1165,30 +1169,32 @@ e_config_init(void)
|
||||||
cf_es->size = _size; \
|
cf_es->size = _size; \
|
||||||
cf_es->overlap = _overlap; \
|
cf_es->overlap = _overlap; \
|
||||||
cf_es->autohide = _autohide; \
|
cf_es->autohide = _autohide; \
|
||||||
|
cf_es->hide_timeout = _hide_timeout; \
|
||||||
|
cf_es->hide_duration = _hide_duration; \
|
||||||
e_config->shelves = evas_list_append(e_config->shelves, cf_es)
|
e_config->shelves = evas_list_append(e_config->shelves, cf_es)
|
||||||
/* shelves for 4 zones on head 0 by default */
|
/* shelves for 4 zones on head 0 by default */
|
||||||
CFG_SHELF("shelf", 0, 0,
|
CFG_SHELF("shelf", 0, 0,
|
||||||
1, 200, E_GADCON_ORIENT_BOTTOM,
|
1, 200, E_GADCON_ORIENT_BOTTOM,
|
||||||
1, 0, "default", 40, 0, 0);
|
1, 0, "default", 40, 0, 0, 1.0, 1.0);
|
||||||
CFG_SHELF("shelf", 0, 1,
|
CFG_SHELF("shelf", 0, 1,
|
||||||
1, 200, E_GADCON_ORIENT_BOTTOM,
|
1, 200, E_GADCON_ORIENT_BOTTOM,
|
||||||
1, 0, "default", 40, 0, 0);
|
1, 0, "default", 40, 0, 0, 1.0, 1.0);
|
||||||
CFG_SHELF("shelf", 0, 2,
|
CFG_SHELF("shelf", 0, 2,
|
||||||
1, 200, E_GADCON_ORIENT_BOTTOM,
|
1, 200, E_GADCON_ORIENT_BOTTOM,
|
||||||
1, 0, "default", 40, 0, 0);
|
1, 0, "default", 40, 0, 0, 1.0, 1.0);
|
||||||
CFG_SHELF("shelf", 0, 3,
|
CFG_SHELF("shelf", 0, 3,
|
||||||
1, 200, E_GADCON_ORIENT_BOTTOM,
|
1, 200, E_GADCON_ORIENT_BOTTOM,
|
||||||
1, 0, "default", 40, 0, 0);
|
1, 0, "default", 40, 0, 0, 1.0, 1.0);
|
||||||
/* shelves for heada 1, 2, and 3 by default */
|
/* shelves for heada 1, 2, and 3 by default */
|
||||||
CFG_SHELF("shelf", 1, 0,
|
CFG_SHELF("shelf", 1, 0,
|
||||||
1, 200, E_GADCON_ORIENT_BOTTOM,
|
1, 200, E_GADCON_ORIENT_BOTTOM,
|
||||||
1, 0, "default", 40, 0, 0);
|
1, 0, "default", 40, 0, 0, 1.0, 1.0);
|
||||||
CFG_SHELF("shelf", 2, 0,
|
CFG_SHELF("shelf", 2, 0,
|
||||||
1, 200, E_GADCON_ORIENT_BOTTOM,
|
1, 200, E_GADCON_ORIENT_BOTTOM,
|
||||||
1, 0, "default", 40, 0, 0);
|
1, 0, "default", 40, 0, 0, 1.0, 1.0);
|
||||||
CFG_SHELF("shelf", 3, 0,
|
CFG_SHELF("shelf", 3, 0,
|
||||||
1, 200, E_GADCON_ORIENT_BOTTOM,
|
1, 200, E_GADCON_ORIENT_BOTTOM,
|
||||||
1, 0, "default", 40, 0, 0);
|
1, 0, "default", 40, 0, 0, 1.0, 1.0);
|
||||||
}
|
}
|
||||||
IFCFGEND;
|
IFCFGEND;
|
||||||
|
|
||||||
|
@ -1433,6 +1439,7 @@ e_config_init(void)
|
||||||
E_CONFIG_LIMIT(e_config->winlist_pos_max_h, 8, 4000);
|
E_CONFIG_LIMIT(e_config->winlist_pos_max_h, 8, 4000);
|
||||||
E_CONFIG_LIMIT(e_config->maximize_policy, E_MAXIMIZE_FULLSCREEN, E_MAXIMIZE_DIRECTION);
|
E_CONFIG_LIMIT(e_config->maximize_policy, E_MAXIMIZE_FULLSCREEN, E_MAXIMIZE_DIRECTION);
|
||||||
E_CONFIG_LIMIT(e_config->allow_manip, 0, 1);
|
E_CONFIG_LIMIT(e_config->allow_manip, 0, 1);
|
||||||
|
E_CONFIG_LIMIT(e_config->border_fix_on_shelf_toggle, 0, 1);
|
||||||
E_CONFIG_LIMIT(e_config->kill_if_close_not_possible, 0, 1);
|
E_CONFIG_LIMIT(e_config->kill_if_close_not_possible, 0, 1);
|
||||||
E_CONFIG_LIMIT(e_config->kill_process, 0, 1);
|
E_CONFIG_LIMIT(e_config->kill_process, 0, 1);
|
||||||
E_CONFIG_LIMIT(e_config->kill_timer_wait, 0.0, 120.0);
|
E_CONFIG_LIMIT(e_config->kill_timer_wait, 0.0, 120.0);
|
||||||
|
|
|
@ -168,6 +168,7 @@ struct _E_Config
|
||||||
int winlist_pos_max_h; // GUI
|
int winlist_pos_max_h; // GUI
|
||||||
int maximize_policy; // GUI
|
int maximize_policy; // GUI
|
||||||
int allow_manip; // GUI
|
int allow_manip; // GUI
|
||||||
|
int border_fix_on_shelf_toggle; // GUI
|
||||||
int kill_if_close_not_possible;
|
int kill_if_close_not_possible;
|
||||||
int kill_process;
|
int kill_process;
|
||||||
double kill_timer_wait;
|
double kill_timer_wait;
|
||||||
|
@ -401,6 +402,8 @@ struct _E_Config_Shelf
|
||||||
int size;
|
int size;
|
||||||
int overlap;
|
int overlap;
|
||||||
int autohide;
|
int autohide;
|
||||||
|
float hide_timeout;
|
||||||
|
float hide_duration;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct _E_Config_Mime_Icon
|
struct _E_Config_Mime_Icon
|
||||||
|
|
|
@ -25,6 +25,7 @@ struct _E_Config_Dialog_Data
|
||||||
int window_resist;
|
int window_resist;
|
||||||
int gadget_resist;
|
int gadget_resist;
|
||||||
int allow_manip;
|
int allow_manip;
|
||||||
|
int border_fix_on_shelf_toggle;
|
||||||
int border_raise_on_mouse_action;
|
int border_raise_on_mouse_action;
|
||||||
int border_raise_on_focus;
|
int border_raise_on_focus;
|
||||||
};
|
};
|
||||||
|
@ -71,6 +72,7 @@ _fill_data(E_Config_Dialog_Data *cfdata)
|
||||||
if (!cfdata->maximize_direction)
|
if (!cfdata->maximize_direction)
|
||||||
cfdata->maximize_direction = E_MAXIMIZE_BOTH;
|
cfdata->maximize_direction = E_MAXIMIZE_BOTH;
|
||||||
cfdata->allow_manip = e_config->allow_manip;
|
cfdata->allow_manip = e_config->allow_manip;
|
||||||
|
cfdata->border_fix_on_shelf_toggle = e_config->border_fix_on_shelf_toggle;
|
||||||
cfdata->border_raise_on_mouse_action = e_config->border_raise_on_mouse_action;
|
cfdata->border_raise_on_mouse_action = e_config->border_raise_on_mouse_action;
|
||||||
cfdata->border_raise_on_focus = e_config->border_raise_on_focus;
|
cfdata->border_raise_on_focus = e_config->border_raise_on_focus;
|
||||||
}
|
}
|
||||||
|
@ -120,6 +122,7 @@ _advanced_apply_data(E_Config_Dialog *cfd, E_Config_Dialog_Data *cfdata)
|
||||||
e_config->gadget_resist = cfdata->gadget_resist;
|
e_config->gadget_resist = cfdata->gadget_resist;
|
||||||
e_config->maximize_policy = cfdata->maximize_policy | cfdata->maximize_direction;
|
e_config->maximize_policy = cfdata->maximize_policy | cfdata->maximize_direction;
|
||||||
e_config->allow_manip = cfdata->allow_manip;
|
e_config->allow_manip = cfdata->allow_manip;
|
||||||
|
e_config->border_fix_on_shelf_toggle = cfdata->border_fix_on_shelf_toggle;
|
||||||
e_config->border_raise_on_mouse_action = cfdata->border_raise_on_mouse_action;
|
e_config->border_raise_on_mouse_action = cfdata->border_raise_on_mouse_action;
|
||||||
e_config->border_raise_on_focus = cfdata->border_raise_on_focus;
|
e_config->border_raise_on_focus = cfdata->border_raise_on_focus;
|
||||||
e_config_save_queue();
|
e_config_save_queue();
|
||||||
|
@ -223,6 +226,8 @@ _advanced_create_widgets(E_Config_Dialog *cfd, Evas *evas, E_Config_Dialog_Data
|
||||||
|
|
||||||
ob = e_widget_check_add(evas, _("Allow window manipulation"), &(cfdata->allow_manip));
|
ob = e_widget_check_add(evas, _("Allow window manipulation"), &(cfdata->allow_manip));
|
||||||
e_widget_framelist_object_append(of, ob);
|
e_widget_framelist_object_append(of, ob);
|
||||||
|
ob = e_widget_check_add(evas, _("Automatically move/resize windows on shelf autohide"), &(cfdata->border_fix_on_shelf_toggle));
|
||||||
|
e_widget_framelist_object_append(of, ob);
|
||||||
e_widget_table_object_append(ot, of, 1, 1, 1, 1, 1, 1, 1, 1);
|
e_widget_table_object_append(ot, of, 1, 1, 1, 1, 1, 1, 1, 1);
|
||||||
|
|
||||||
e_widget_list_object_append(o, ot, 1, 1, 0.5);
|
e_widget_list_object_append(o, ot, 1, 1, 0.5);
|
||||||
|
|
|
@ -36,6 +36,8 @@ struct _E_Config_Dialog_Data
|
||||||
int layering;
|
int layering;
|
||||||
int overlapping;
|
int overlapping;
|
||||||
int autohiding;
|
int autohiding;
|
||||||
|
double hide_timeout;
|
||||||
|
double hide_duration;
|
||||||
};
|
};
|
||||||
|
|
||||||
/* a nice easy setup function that does the dirty work */
|
/* a nice easy setup function that does the dirty work */
|
||||||
|
@ -117,6 +119,8 @@ _fill_data(E_Config_Dialog_Data *cfdata)
|
||||||
cfdata->size = cfdata->escfg->size;
|
cfdata->size = cfdata->escfg->size;
|
||||||
cfdata->overlapping = cfdata->escfg->overlap;
|
cfdata->overlapping = cfdata->escfg->overlap;
|
||||||
cfdata->autohiding = cfdata->escfg->autohide;
|
cfdata->autohiding = cfdata->escfg->autohide;
|
||||||
|
cfdata->hide_timeout = cfdata->escfg->hide_timeout;
|
||||||
|
cfdata->hide_duration = cfdata->escfg->hide_duration;
|
||||||
if (cfdata->size <= 24)
|
if (cfdata->size <= 24)
|
||||||
cfdata->basic_size = 24;
|
cfdata->basic_size = 24;
|
||||||
else if (cfdata->size <= 32)
|
else if (cfdata->size <= 32)
|
||||||
|
@ -337,7 +341,10 @@ _advanced_apply_data(E_Config_Dialog *cfd, E_Config_Dialog_Data *cfdata)
|
||||||
}
|
}
|
||||||
|
|
||||||
cfdata->escfg->overlap = cfdata->overlapping;
|
cfdata->escfg->overlap = cfdata->overlapping;
|
||||||
|
|
||||||
cfdata->escfg->autohide = cfdata->autohiding;
|
cfdata->escfg->autohide = cfdata->autohiding;
|
||||||
|
cfdata->escfg->hide_timeout = cfdata->hide_timeout;
|
||||||
|
cfdata->escfg->hide_duration = cfdata->hide_duration;
|
||||||
if (cfdata->escfg->autohide && !cfdata->es->hidden)
|
if (cfdata->escfg->autohide && !cfdata->es->hidden)
|
||||||
e_shelf_toggle(cfdata->es, 0);
|
e_shelf_toggle(cfdata->es, 0);
|
||||||
else if (!cfdata->escfg->autohide && cfdata->es->hidden)
|
else if (!cfdata->escfg->autohide && cfdata->es->hidden)
|
||||||
|
@ -453,8 +460,6 @@ _advanced_create_widgets(E_Config_Dialog *cfd, Evas *evas, E_Config_Dialog_Data
|
||||||
e_widget_framelist_object_append(of, ob);
|
e_widget_framelist_object_append(of, ob);
|
||||||
ob = e_widget_check_add(evas, _("Allow windows to overlap the shelf"), &(cfdata->overlapping));
|
ob = e_widget_check_add(evas, _("Allow windows to overlap the shelf"), &(cfdata->overlapping));
|
||||||
e_widget_framelist_object_append(of, ob);
|
e_widget_framelist_object_append(of, ob);
|
||||||
ob = e_widget_check_add(evas, _("Auto-hide the shelf"), &(cfdata->autohiding));
|
|
||||||
e_widget_framelist_object_append(of, ob);
|
|
||||||
e_widget_list_object_append(o2, of, 1, 1, 0.5);
|
e_widget_list_object_append(o2, of, 1, 1, 0.5);
|
||||||
|
|
||||||
of = e_widget_frametable_add(evas, _("Layout"), 1);
|
of = e_widget_frametable_add(evas, _("Layout"), 1);
|
||||||
|
@ -485,6 +490,19 @@ _advanced_create_widgets(E_Config_Dialog *cfd, Evas *evas, E_Config_Dialog_Data
|
||||||
e_widget_frametable_object_append(of, ob, 4, 3, 1, 1, 1, 1, 1, 1);
|
e_widget_frametable_object_append(of, ob, 4, 3, 1, 1, 1, 1, 1, 1);
|
||||||
e_widget_list_object_append(o2, of, 1, 1, 0.5);
|
e_widget_list_object_append(o2, of, 1, 1, 0.5);
|
||||||
|
|
||||||
|
of = e_widget_framelist_add(evas, _("Autohide"), 0);
|
||||||
|
ob = e_widget_check_add(evas, _("Auto-hide the shelf"), &(cfdata->autohiding));
|
||||||
|
e_widget_framelist_object_append(of, ob);
|
||||||
|
ob = e_widget_label_add(evas, _("Hide timeout"));
|
||||||
|
e_widget_framelist_object_append(of, ob);
|
||||||
|
ob = e_widget_slider_add(evas, 1, 0, _("%.1f seconds"), 0.2, 6.0, 0.2, 0, &(cfdata->hide_timeout), NULL, 100);
|
||||||
|
e_widget_framelist_object_append(of, ob);
|
||||||
|
ob = e_widget_label_add(evas, _("Hide duration"));
|
||||||
|
e_widget_framelist_object_append(of, ob);
|
||||||
|
ob = e_widget_slider_add(evas, 1, 0, _("%.1f seconds"), 0.1, 2.0, 0.1, 0, &(cfdata->hide_duration), NULL, 100);
|
||||||
|
e_widget_framelist_object_append(of, ob);
|
||||||
|
e_widget_list_object_append(o2, of, 1, 1, 0.5);
|
||||||
|
|
||||||
e_widget_list_object_append(o, o2, 1, 1, 0.5);
|
e_widget_list_object_append(o, o2, 1, 1, 0.5);
|
||||||
|
|
||||||
o2 = e_widget_list_add(evas, 0, 0);
|
o2 = e_widget_list_add(evas, 0, 0);
|
||||||
|
|
|
@ -8,6 +8,7 @@ static const char *_e_shelf_orient_string_get(E_Shelf *es);
|
||||||
static void _e_shelf_gadcon_min_size_request(void *data, E_Gadcon *gc, Evas_Coord w, Evas_Coord h);
|
static void _e_shelf_gadcon_min_size_request(void *data, E_Gadcon *gc, Evas_Coord w, Evas_Coord h);
|
||||||
static void _e_shelf_gadcon_size_request(void *data, E_Gadcon *gc, Evas_Coord w, Evas_Coord h);
|
static void _e_shelf_gadcon_size_request(void *data, E_Gadcon *gc, Evas_Coord w, Evas_Coord h);
|
||||||
static Evas_Object *_e_shelf_gadcon_frame_request(void *data, E_Gadcon_Client *gcc, const char *style);
|
static Evas_Object *_e_shelf_gadcon_frame_request(void *data, E_Gadcon_Client *gcc, const char *style);
|
||||||
|
static void _e_shelf_toggle_border_fix(E_Shelf *es);
|
||||||
static void _e_shelf_cb_menu_config(void *data, E_Menu *m, E_Menu_Item *mi);
|
static void _e_shelf_cb_menu_config(void *data, E_Menu *m, E_Menu_Item *mi);
|
||||||
static void _e_shelf_cb_menu_edit(void *data, E_Menu *m, E_Menu_Item *mi);
|
static void _e_shelf_cb_menu_edit(void *data, E_Menu *m, E_Menu_Item *mi);
|
||||||
static void _e_shelf_cb_menu_contents(void *data, E_Menu *m, E_Menu_Item *mi);
|
static void _e_shelf_cb_menu_contents(void *data, E_Menu *m, E_Menu_Item *mi);
|
||||||
|
@ -77,9 +78,12 @@ e_shelf_config_init(void)
|
||||||
cf_es->popup, cf_es->layer, -1);
|
cf_es->popup, cf_es->layer, -1);
|
||||||
if (es)
|
if (es)
|
||||||
{
|
{
|
||||||
|
if (!cf_es->hide_timeout) cf_es->hide_timeout = 1.0;
|
||||||
|
if (!cf_es->hide_duration) cf_es->hide_duration = 1.0;
|
||||||
es->cfg = cf_es;
|
es->cfg = cf_es;
|
||||||
es->fit_along = cf_es->fit_along;
|
es->fit_along = cf_es->fit_along;
|
||||||
es->fit_size = cf_es->fit_size;
|
es->fit_size = cf_es->fit_size;
|
||||||
|
|
||||||
e_shelf_orient(es, cf_es->orient);
|
e_shelf_orient(es, cf_es->orient);
|
||||||
e_shelf_position_calc(es);
|
e_shelf_position_calc(es);
|
||||||
e_shelf_populate(es);
|
e_shelf_populate(es);
|
||||||
|
@ -269,30 +273,33 @@ e_shelf_toggle(E_Shelf *es, int show)
|
||||||
{
|
{
|
||||||
E_OBJECT_CHECK(es);
|
E_OBJECT_CHECK(es);
|
||||||
E_OBJECT_TYPE_CHECK(es, E_SHELF_TYPE);
|
E_OBJECT_TYPE_CHECK(es, E_SHELF_TYPE);
|
||||||
if (show && es->hidden && !es->instant_timer)
|
if (show)
|
||||||
{
|
{
|
||||||
es->hidden = 0;
|
|
||||||
edje_object_signal_emit(es->o_base, "e,state,visible", "e");
|
|
||||||
if (es->instant_delay >= 0.0)
|
|
||||||
{
|
|
||||||
if (!es->instant_timer)
|
|
||||||
_e_shelf_cb_instant_hide_timer(es);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
if (!es->hide_animator)
|
|
||||||
es->hide_animator = ecore_animator_add(_e_shelf_cb_hide_animator, es);
|
|
||||||
}
|
|
||||||
if (es->hide_timer)
|
if (es->hide_timer)
|
||||||
{
|
{
|
||||||
ecore_timer_del(es->hide_timer);
|
ecore_timer_del(es->hide_timer);
|
||||||
es->hide_timer = NULL;
|
es->hide_timer = NULL;
|
||||||
}
|
}
|
||||||
|
if (es->hidden && !es->instant_timer)
|
||||||
|
{
|
||||||
|
es->hidden = 0;
|
||||||
|
edje_object_signal_emit(es->o_base, "e,state,visible", "e");
|
||||||
|
if (es->instant_delay >= 0.0)
|
||||||
|
{
|
||||||
|
if (!es->instant_timer)
|
||||||
|
_e_shelf_cb_instant_hide_timer(es);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if(!es->hide_animator)
|
||||||
|
es->hide_animator = ecore_animator_add(_e_shelf_cb_hide_animator, es);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else if (!show && es->cfg->autohide && !es->hidden)
|
else if (!show && es->cfg->autohide && !es->hidden)
|
||||||
{
|
{
|
||||||
if (!es->hide_timer)
|
if(!es->hide_timer)
|
||||||
es->hide_timer = ecore_timer_add(1.0, _e_shelf_cb_hide_timer, es);
|
es->hide_timer = ecore_timer_add(es->cfg->hide_timeout, _e_shelf_cb_hide_timer, es);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -389,6 +396,8 @@ e_shelf_save(E_Shelf *es)
|
||||||
cf_es->fit_size = es->fit_size;
|
cf_es->fit_size = es->fit_size;
|
||||||
cf_es->overlap = 0;
|
cf_es->overlap = 0;
|
||||||
cf_es->autohide = 0;
|
cf_es->autohide = 0;
|
||||||
|
cf_es->hide_timeout = 1.0;
|
||||||
|
cf_es->hide_duration = 1.0;
|
||||||
es->cfg = cf_es;
|
es->cfg = cf_es;
|
||||||
}
|
}
|
||||||
e_config_save_queue();
|
e_config_save_queue();
|
||||||
|
@ -565,7 +574,6 @@ e_shelf_style_set(E_Shelf *es, const char *style)
|
||||||
else
|
else
|
||||||
es->instant_delay = -1.0;
|
es->instant_delay = -1.0;
|
||||||
|
|
||||||
es->hide_origin = -1;
|
|
||||||
e_gadcon_unpopulate(es->gadcon);
|
e_gadcon_unpopulate(es->gadcon);
|
||||||
e_gadcon_populate(es->gadcon);
|
e_gadcon_populate(es->gadcon);
|
||||||
}
|
}
|
||||||
|
@ -898,6 +906,85 @@ _e_shelf_gadcon_frame_request(void *data, E_Gadcon_Client *gcc, const char *styl
|
||||||
return o;
|
return o;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
_e_shelf_toggle_border_fix(E_Shelf *es)
|
||||||
|
{
|
||||||
|
Evas_List *l;
|
||||||
|
|
||||||
|
if (es->cfg->overlap || !e_config->border_fix_on_shelf_toggle)
|
||||||
|
return;
|
||||||
|
|
||||||
|
for (l = e_border_client_list(); l; l = l->next)
|
||||||
|
{
|
||||||
|
E_Border *bd;
|
||||||
|
|
||||||
|
bd = l->data;
|
||||||
|
if ((bd->maximized & E_MAXIMIZE_TYPE) == E_MAXIMIZE_NONE)
|
||||||
|
{
|
||||||
|
if (bd->lock_client_location)
|
||||||
|
continue;
|
||||||
|
if (es->hidden)
|
||||||
|
{
|
||||||
|
if (!bd->shelf_fix.modified)
|
||||||
|
continue;
|
||||||
|
if (!--bd->shelf_fix.modified)
|
||||||
|
{
|
||||||
|
e_border_move(bd, bd->shelf_fix.x, bd->shelf_fix.y);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!E_INTERSECTS(bd->x, bd->y, bd->w, bd->h,
|
||||||
|
es->x, es->y, es->w, es->h))
|
||||||
|
continue;
|
||||||
|
|
||||||
|
if (!es->hidden)
|
||||||
|
{
|
||||||
|
if (!bd->shelf_fix.modified++)
|
||||||
|
bd->shelf_fix.x = bd->x;
|
||||||
|
bd->shelf_fix.y = bd->y;
|
||||||
|
}
|
||||||
|
|
||||||
|
switch (es->gadcon->orient)
|
||||||
|
{
|
||||||
|
case E_GADCON_ORIENT_TOP:
|
||||||
|
case E_GADCON_ORIENT_CORNER_TL:
|
||||||
|
case E_GADCON_ORIENT_CORNER_TR:
|
||||||
|
if (!es->hidden)
|
||||||
|
e_border_move(bd, bd->x, bd->y + es->h);
|
||||||
|
break;
|
||||||
|
case E_GADCON_ORIENT_BOTTOM:
|
||||||
|
case E_GADCON_ORIENT_CORNER_BL:
|
||||||
|
case E_GADCON_ORIENT_CORNER_BR:
|
||||||
|
if (!es->hidden)
|
||||||
|
e_border_move(bd, bd->x, bd->y - es->h);
|
||||||
|
break;
|
||||||
|
case E_GADCON_ORIENT_LEFT:
|
||||||
|
case E_GADCON_ORIENT_CORNER_LB:
|
||||||
|
case E_GADCON_ORIENT_CORNER_LT:
|
||||||
|
if (!es->hidden)
|
||||||
|
e_border_move(bd, bd->x + es->w, bd->y);
|
||||||
|
break;
|
||||||
|
case E_GADCON_ORIENT_RIGHT:
|
||||||
|
case E_GADCON_ORIENT_CORNER_RB:
|
||||||
|
case E_GADCON_ORIENT_CORNER_RT:
|
||||||
|
if (!es->hidden)
|
||||||
|
e_border_move(bd, bd->x - es->w, bd->y);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
E_Maximize max;
|
||||||
|
max = bd->maximized;
|
||||||
|
e_border_unmaximize(bd, E_MAXIMIZE_BOTH);
|
||||||
|
e_border_maximize(bd, max);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
_e_shelf_menu_append(E_Shelf *es, E_Menu *mn)
|
_e_shelf_menu_append(E_Shelf *es, E_Menu *mn)
|
||||||
{
|
{
|
||||||
|
@ -1110,13 +1197,9 @@ _e_shelf_cb_hide_timer(void *data)
|
||||||
if (!es->hide_animator)
|
if (!es->hide_animator)
|
||||||
es->hide_animator = ecore_animator_add(_e_shelf_cb_hide_animator, es);
|
es->hide_animator = ecore_animator_add(_e_shelf_cb_hide_animator, es);
|
||||||
}
|
}
|
||||||
if (es->hide_timer)
|
es->hide_timer = NULL;
|
||||||
{
|
|
||||||
ecore_timer_del(es->hide_timer);
|
|
||||||
es->hide_timer = NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
return 1;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int
|
static int
|
||||||
|
@ -1132,8 +1215,8 @@ _e_shelf_cb_hide_animator(void *data)
|
||||||
case E_GADCON_ORIENT_TOP:
|
case E_GADCON_ORIENT_TOP:
|
||||||
case E_GADCON_ORIENT_CORNER_TL:
|
case E_GADCON_ORIENT_CORNER_TL:
|
||||||
case E_GADCON_ORIENT_CORNER_TR:
|
case E_GADCON_ORIENT_CORNER_TR:
|
||||||
/* TODO: step coefficient needs to be configurable */
|
step = ((es->h - es->hidden_state_size) / e_config->framerate) / es->cfg->hide_duration;
|
||||||
step = ((es->h - es->hidden_state_size) / e_config->framerate) * 2;
|
if (!step) step = 1;
|
||||||
if (es->hidden)
|
if (es->hidden)
|
||||||
{
|
{
|
||||||
if (es->hide_origin == -1) es->hide_origin = es->y;
|
if (es->hide_origin == -1) es->hide_origin = es->y;
|
||||||
|
@ -1175,7 +1258,8 @@ _e_shelf_cb_hide_animator(void *data)
|
||||||
case E_GADCON_ORIENT_BOTTOM:
|
case E_GADCON_ORIENT_BOTTOM:
|
||||||
case E_GADCON_ORIENT_CORNER_BL:
|
case E_GADCON_ORIENT_CORNER_BL:
|
||||||
case E_GADCON_ORIENT_CORNER_BR:
|
case E_GADCON_ORIENT_CORNER_BR:
|
||||||
step = ((es->h - es->hidden_state_size) / e_config->framerate) * 2;
|
step = ((es->h - es->hidden_state_size) / e_config->framerate) / es->cfg->hide_duration;
|
||||||
|
if (!step) step = 1;
|
||||||
if (es->hidden)
|
if (es->hidden)
|
||||||
{
|
{
|
||||||
if (es->hide_origin == -1) es->hide_origin = es->y;
|
if (es->hide_origin == -1) es->hide_origin = es->y;
|
||||||
|
@ -1218,7 +1302,8 @@ _e_shelf_cb_hide_animator(void *data)
|
||||||
case E_GADCON_ORIENT_LEFT:
|
case E_GADCON_ORIENT_LEFT:
|
||||||
case E_GADCON_ORIENT_CORNER_LB:
|
case E_GADCON_ORIENT_CORNER_LB:
|
||||||
case E_GADCON_ORIENT_CORNER_LT:
|
case E_GADCON_ORIENT_CORNER_LT:
|
||||||
step = ((es->w - es->hidden_state_size) / e_config->framerate) * 2;
|
step = ((es->w - es->hidden_state_size) / e_config->framerate) / es->cfg->hide_duration;
|
||||||
|
if (!step) step = 1;
|
||||||
if (es->hidden)
|
if (es->hidden)
|
||||||
{
|
{
|
||||||
if (es->hide_origin == -1) es->hide_origin = es->x;
|
if (es->hide_origin == -1) es->hide_origin = es->x;
|
||||||
|
@ -1261,7 +1346,8 @@ _e_shelf_cb_hide_animator(void *data)
|
||||||
case E_GADCON_ORIENT_RIGHT:
|
case E_GADCON_ORIENT_RIGHT:
|
||||||
case E_GADCON_ORIENT_CORNER_RB:
|
case E_GADCON_ORIENT_CORNER_RB:
|
||||||
case E_GADCON_ORIENT_CORNER_RT:
|
case E_GADCON_ORIENT_CORNER_RT:
|
||||||
step = ((es->w - es->hidden_state_size) / e_config->framerate) * 2;
|
step = ((es->w - es->hidden_state_size) / e_config->framerate) / es->cfg->hide_duration;
|
||||||
|
if (!step) step = 1;
|
||||||
if (es->hidden)
|
if (es->hidden)
|
||||||
{
|
{
|
||||||
if (es->hide_origin == -1) es->hide_origin = es->x;
|
if (es->hide_origin == -1) es->hide_origin = es->x;
|
||||||
|
@ -1306,9 +1392,9 @@ _e_shelf_cb_hide_animator(void *data)
|
||||||
return 1;
|
return 1;
|
||||||
|
|
||||||
end:
|
end:
|
||||||
ecore_animator_del(es->hide_animator);
|
|
||||||
es->hide_animator = NULL;
|
es->hide_animator = NULL;
|
||||||
return 1;
|
_e_shelf_toggle_border_fix(es);
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int
|
static int
|
||||||
|
@ -1323,7 +1409,6 @@ _e_shelf_cb_instant_hide_timer(void *data)
|
||||||
case E_GADCON_ORIENT_TOP:
|
case E_GADCON_ORIENT_TOP:
|
||||||
case E_GADCON_ORIENT_CORNER_TL:
|
case E_GADCON_ORIENT_CORNER_TL:
|
||||||
case E_GADCON_ORIENT_CORNER_TR:
|
case E_GADCON_ORIENT_CORNER_TR:
|
||||||
/* TODO: step coefficient needs to be configurable */
|
|
||||||
if (es->hidden)
|
if (es->hidden)
|
||||||
e_shelf_move(es, es->x, es->y - es->h + es->hidden_state_size);
|
e_shelf_move(es, es->x, es->y - es->h + es->hidden_state_size);
|
||||||
else
|
else
|
||||||
|
@ -1356,12 +1441,9 @@ _e_shelf_cb_instant_hide_timer(void *data)
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
if (es->instant_timer)
|
es->instant_timer = NULL;
|
||||||
{
|
_e_shelf_toggle_border_fix(es);
|
||||||
ecore_timer_del(es->instant_timer);
|
return 0;
|
||||||
es->instant_timer = NULL;
|
|
||||||
}
|
|
||||||
return 1;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
|
Loading…
Reference in New Issue