This is an automated email from the git hooks/post-receive script.

git pushed a commit to branch master
in repository enlightenment.

View the commit online.

commit 130535af97d4059836c02b988e8111f3987c2505
Author: Carsten Haitzler <[email protected]>
AuthorDate: Tue Jul 5 09:25:35 2022 +0100

    win - first map - fix energyxt unmap bug by wiping ignore unmap
    
    For some reason I have yet to divine we don't get an initial unmap
    event due to the reparent of the energyxt dialog windows and the
    "ignore that first unmap" flag does not get cleared because it doesn't
    happen. later when the dialog is withdrawn {9unmapped) this is ignored
    then when you close the dialog... thus keeping it around as far as e
    is concerned.
    
    so to fix this - add a small timeout to clean this flag after a
    show/map.
    
    @fix
---
 src/bin/e_client.c |  2 ++
 src/bin/e_client.h |  1 +
 src/bin/e_comp_x.c | 16 ++++++++++++++++
 3 files changed, 19 insertions(+)

diff --git a/src/bin/e_client.c b/src/bin/e_client.c
index 01a1b0bbf..b969a3cf8 100644
--- a/src/bin/e_client.c
+++ b/src/bin/e_client.c
@@ -586,6 +586,8 @@ _e_client_free(E_Client *ec)
    if (ec->stack.prev) ec->stack.prev->stack.next = ec->stack.next;
    if (ec->stack.next) ec->stack.next->stack.prev = ec->stack.prev;
 
+   E_FREE_FUNC(ec->ignore_first_unmap_clear_timer, ecore_timer_del);
+
    ec->e.state.profile.wait_desk = NULL;
    evas_object_del(ec->frame);
    E_OBJECT(ec)->references--;
diff --git a/src/bin/e_client.h b/src/bin/e_client.h
index cc4bc9b1a..304536ae9 100644
--- a/src/bin/e_client.h
+++ b/src/bin/e_client.h
@@ -302,6 +302,7 @@ struct E_Client
 
    unsigned char      ignore_first_unmap;
    E_Pointer_Mode     resize_mode;
+   Ecore_Timer       *ignore_first_unmap_clear_timer;
 
    struct
    {
diff --git a/src/bin/e_comp_x.c b/src/bin/e_comp_x.c
index 656da4436..408be95ff 100644
--- a/src/bin/e_comp_x.c
+++ b/src/bin/e_comp_x.c
@@ -3463,6 +3463,16 @@ _e_comp_x_frame_extents_adjust(E_Client *ec, int exl, int exr, int ext, int exb)
      }
 }
 
+static Eina_Bool
+_cb_e_comp_x_ignore_first_unmap_clear_timer(void *data)
+{
+   E_Client *ec = data;
+
+   ec->ignore_first_unmap_clear_timer = NULL;
+   if (ec->ignore_first_unmap > 0) ec->ignore_first_unmap--;
+   return EINA_FALSE;
+}
+
 static void
 _e_comp_x_hook_client_pre_frame_assign(void *d EINA_UNUSED, E_Client *ec)
 {
@@ -3515,6 +3525,9 @@ _e_comp_x_hook_client_pre_frame_assign(void *d EINA_UNUSED, E_Client *ec)
    if (!ec->internal)
      ecore_x_window_save_set_add(win);
    ec->ignore_first_unmap++;
+   E_FREE_FUNC(ec->ignore_first_unmap_clear_timer, ecore_timer_del);
+   ec->ignore_first_unmap_clear_timer = ecore_timer_add
+     (0.2, _cb_e_comp_x_ignore_first_unmap_clear_timer, ec);
    ecore_x_window_reparent(win, pwin, 0, 0);
    e_pixmap_alias(ep, E_PIXMAP_TYPE_X, pwin);
 
@@ -5746,6 +5759,9 @@ _e_comp_x_manage_windows(void)
                   evas_object_geometry_set(ec->frame, ec->client.x, ec->client.y, ec->client.w, ec->client.h);
                }
              ec->ignore_first_unmap = 1;
+             E_FREE_FUNC(ec->ignore_first_unmap_clear_timer, ecore_timer_del);
+             ec->ignore_first_unmap_clear_timer = ecore_timer_add
+               (0.2, _cb_e_comp_x_ignore_first_unmap_clear_timer, ec);
              if (ec->override || (!ec->icccm.fetch.hints))
                evas_object_show(ec->frame);
              _e_comp_x_client_stack(ec);

-- 
To stop receiving notification emails like this one, please contact
the administrator of this repository.

Reply via email to