e_client: check buffer_flush flag in e_client_uniconify 19/265419/3
authorDoyoun Kang <doyoun.kang@samsung.com>
Mon, 18 Oct 2021 06:10:41 +0000 (15:10 +0900)
committerDoyoun Kang <doyoun.kang@samsung.com>
Tue, 19 Oct 2021 05:48:24 +0000 (14:48 +0900)
There was a bug that the visibility toggled on/off as below scenario.
1. WinA set buffer_flush and deiconify_update to 0.
2. WinA attached Null buffer.
3. Turn off the screen.
4. Turn on the screen.
5. WinA's visibility was toggled on and off continuously

This was because we didn't consider buffer_flush and deiconify_update states in
e_client_uniconify.
So, we add code to check the window's buffer_flush and deiconify_update state.
If those values are set to all 0, then e shows the window in e_client_uniconify.

Change-Id: I32e030689c04608510783df367d9c30657e8777b

src/bin/e_client.c

index 0e82e2a5456d078d99d7a284c1942318475eb7a6..c0a60082148041f8eb5b38cb7c43bb8cf25b769f 100644 (file)
@@ -6251,19 +6251,33 @@ e_client_uniconify(E_Client *ec)
         evas_object_show(ec->frame);
      }
 
-   if (ec->pixmap && e_pixmap_usable_get(ec->pixmap))
+   if (ec->pixmap)
      {
-        if (cdata && cdata->mapped)
+        if (e_pixmap_usable_get(ec->pixmap))
           {
-             ELOGF("TZVIS", "UNICONIFY|object show. frame_visible:%d", ec, evas_object_visible_get(ec->frame));
-             evas_object_show(ec->frame);
+             if (cdata && cdata->mapped)
+               {
+                  ELOGF("TZVIS", "UNICONIFY|object show. frame_visible:%d", ec, evas_object_visible_get(ec->frame));
+                  evas_object_show(ec->frame);
+               }
+             else
+               {
+                  ELOGF("TZVIS", "UNICONIFY|object no show. currently unmapped", ec);
+               }
           }
         else
           {
-             ELOGF("TZVIS", "UNICONIFY|object no show. currently unmapped", ec);
+             if (!ec->exp_iconify.buffer_flush &&
+                 !ec->exp_iconify.deiconify_update)
+               {
+                  if (cdata && cdata->mapped)
+                    {
+                       ELOGF("TZVIS", "UNICONIFY|object show. no use buffer flush. frame_visible:%d", ec, evas_object_visible_get(ec->frame));
+                       evas_object_show(ec->frame);
+                    }
+               }
           }
      }
-
    e_client_comp_hidden_set(ec, 0);
    ec->deskshow = ec->iconic = 0;