diff options
author | Stephen okra Houston <smhouston88@gmail.com> | 2016-10-23 11:11:46 -0500 |
---|---|---|
committer | Stephen okra Houston <smhouston88@gmail.com> | 2016-10-23 11:11:46 -0500 |
commit | 232e511b82a6e898dc1c20120add136c0e6b67aa (patch) | |
tree | 84fc004f884ad527ea46b1337bdc378e0c5d7e65 | |
parent | b90f69c0513630761c823c5e883c388d7f599ab9 (diff) | |
download | enlightenment-devs/okra/luncher.tar.gz |
Luncher: Don't hide preview if client menu is open.devs/okra/luncher
-rw-r--r-- | src/modules/luncher/bar.c | 35 |
1 files changed, 31 insertions, 4 deletions
diff --git a/src/modules/luncher/bar.c b/src/modules/luncher/bar.c index 450b45cdea..59fc8d3369 100644 --- a/src/modules/luncher/bar.c +++ b/src/modules/luncher/bar.c @@ -1,7 +1,7 @@ #include "luncher.h" -Eina_List *handlers; -Evas_Object *current_preview; - +static Eina_List *handlers; +static Evas_Object *current_preview; +static Eina_Bool current_preview_menu; static Eina_Bool _bar_icon_preview_show(void *data); static const char * @@ -210,6 +210,7 @@ _bar_icon_mouse_up(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED ic->preview = NULL; } current_preview = NULL; + current_preview_menu = EINA_FALSE; _bar_icon_preview_show(ic); } } @@ -229,6 +230,7 @@ _bar_icon_preview_hide(void *data) elm_ctxpopup_dismiss(ic->preview); ic->preview = NULL; current_preview = NULL; + current_preview_menu = EINA_FALSE; ic->active = EINA_FALSE; return EINA_FALSE; @@ -251,6 +253,8 @@ _bar_icon_preview_mouse_out(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EI { Icon *ic = data; + if (current_preview_menu) + return; if (ic->mouse_out_timer) ecore_timer_del(ic->mouse_out_timer); ic->mouse_out_timer = ecore_timer_add(0.75, _bar_icon_preview_hide, ic); @@ -267,20 +271,40 @@ _bar_icon_preview_mouse_in(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EIN } static void +_bar_icon_preview_menu_hide(void *data, Evas *e EINA_UNUSED, Evas_Object *obj, void *event_data EINA_UNUSED) +{ + Icon *ic = data; + + if (ic) + { + if (ic->preview) + { + current_preview_menu = EINA_FALSE; + _bar_icon_preview_mouse_out(ic, NULL, NULL, NULL); + } + } +} + +static void _bar_icon_preview_mouse_up(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_data) { E_Client *ec = data; Evas_Event_Mouse_Up *ev = event_data; + Icon *ic = evas_object_data_get(current_preview, "icon"); if (ev->button == 3) { e_int_client_menu_show(ec, ev->canvas.x, ev->canvas.y, 0, ev->timestamp); + evas_object_event_callback_add(ec->border_menu->comp_object, EVAS_CALLBACK_HIDE, + _bar_icon_preview_menu_hide, ic); + current_preview_menu = EINA_TRUE; return; } e_client_activate(ec, 1); if (current_preview) elm_ctxpopup_dismiss(current_preview); current_preview = NULL; + current_preview_menu = EINA_FALSE; } static void @@ -343,6 +367,7 @@ _bar_icon_preview_show(void *data) if (current_preview) elm_ctxpopup_dismiss(current_preview); current_preview = NULL; + current_preview_menu = EINA_FALSE; if (!eina_list_count(ic->execs) && !eina_list_count(ic->clients)) return EINA_FALSE; @@ -428,7 +453,7 @@ _bar_icon_mouse_in(void *data, Evas *e EINA_UNUSED, Evas_Object *obj, void *even ecore_timer_del(ic->mouse_in_timer); if (eina_list_count(ic->execs) || eina_list_count(ic->clients)) clients = EINA_TRUE; - if (current_preview && clients) + if (current_preview && clients && !current_preview_menu) { Icon *icon = evas_object_data_get(current_preview, "icon"); if (icon->preview) @@ -439,6 +464,7 @@ _bar_icon_mouse_in(void *data, Evas *e EINA_UNUSED, Evas_Object *obj, void *even icon->preview = NULL; } current_preview = NULL; + current_preview_menu = EINA_FALSE; _bar_icon_preview_show(ic); } else @@ -1243,6 +1269,7 @@ bar_create(Evas_Object *parent, int *id, E_Gadget_Site_Orient orient) luncher_instances = eina_list_append(luncher_instances, inst); current_preview = NULL; + current_preview_menu = EINA_FALSE; return inst->o_main; } |