From 9477828550566f1b93f14e014f23fbdf33ba8fc7 Mon Sep 17 00:00:00 2001 From: "Carsten Haitzler (Rasterman)" Date: Mon, 31 Jan 2022 11:39:15 +0000 Subject: [PATCH] pager - don't keep building up more popups on popups on switches re-use the existing popup and stop stacking more and more. @fix --- src/modules/pager/e_mod_main.c | 29 ++++++++++++++++++++++++----- 1 file changed, 24 insertions(+), 5 deletions(-) diff --git a/src/modules/pager/e_mod_main.c b/src/modules/pager/e_mod_main.c index dd630b1f4..6fef54227 100644 --- a/src/modules/pager/e_mod_main.c +++ b/src/modules/pager/e_mod_main.c @@ -1158,12 +1158,13 @@ _pager_cb_event_desk_show(void *data EINA_UNUSED, int type EINA_UNUSED, void *ev { E_Event_Desk_Show *ev = event; Eina_List *l; - Pager *p; + Pager *p = NULL; Pager_Popup *pp; Pager_Desk *pd; if (!eina_list_count(pagers)) return ECORE_CALLBACK_PASS_ON; + current_desk = ev->desk; EINA_LIST_FOREACH(pagers, l, p) { if (p->zone != ev->desk->zone) continue; @@ -1172,20 +1173,29 @@ _pager_cb_event_desk_show(void *data EINA_UNUSED, int type EINA_UNUSED, void *ev if (p->popup) edje_object_part_text_set(p->popup->o_bg, "e.text.label", ev->desk->name); + break; } if ((pager_config->popup) && (!act_popup) && ((ecore_time_get() - _pager_start_time) > 0.5)) //. not at start { if ((pp = _pager_popup_find(ev->desk->zone))) - evas_object_show(pp->popup); + { + evas_object_show(pp->popup); + pd = _pager_desk_find(pp->pager, current_desk); + if (pd) _pager_desk_select(pd); + } else - pp = _pager_popup_new(ev->desk->zone, 0, EINA_TRUE); + { + pp = _pager_popup_new(ev->desk->zone, 0, EINA_TRUE); + } if (pp->timer) ecore_timer_loop_reset(pp->timer); else pp->timer = ecore_timer_add(pager_config->popup_speed, _pager_popup_cb_timeout, pp); + if (p) + p->popup = pp; } return ECORE_CALLBACK_PASS_ON; @@ -1853,6 +1863,17 @@ static Eina_Bool _pager_popup_cb_timeout(void *data) { Pager_Popup *pp = data; + Eina_List *l; + Pager *p; + + EINA_LIST_FOREACH(pagers, l, p) + { + if (p->popup == pp) + { + p->popup = NULL; + break; + } + } pp->timer = NULL; _pager_popup_free(pp); @@ -1883,7 +1904,6 @@ static int _pager_popup_show(void) { E_Zone *zone; - int x, y, w, h; Pager_Popup *pp; if ((act_popup) || (input_window)) return 0; @@ -1916,7 +1936,6 @@ _pager_popup_show(void) (ECORE_EVENT_MOUSE_WHEEL, _pager_popup_cb_mouse_wheel, NULL)); act_popup = _pager_popup_new(zone, 1, EINA_FALSE); - evas_object_geometry_get(act_popup->pager->o_table, &x, &y, &w, &h); current_desk = e_desk_current_get(zone); return 1; }