summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorStephen okra Houston <smhouston88@gmail.com>2016-10-23 11:11:46 -0500
committerStephen okra Houston <smhouston88@gmail.com>2016-10-23 11:11:46 -0500
commit232e511b82a6e898dc1c20120add136c0e6b67aa (patch)
tree84fc004f884ad527ea46b1337bdc378e0c5d7e65
parentb90f69c0513630761c823c5e883c388d7f599ab9 (diff)
downloadenlightenment-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.c35
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;
}