[gtk+] win32: properly handle show and focus



commit eb555979dbd457f3afddada4daf8b73f2cd66db6
Author: Ignacio Casal Quinteiro <icq gnome org>
Date:   Mon Feb 8 13:20:02 2016 +0100

    win32: properly handle show and focus
    
    The first time a window is shown we should always call SW_SHOWNORMAL.
    Understand whether to call SW_SHOW or SW_SHOWNORMAL and the specific
    ones for the temporary windows depending on IsWindowVisible.
    This also fixes the problem when calling gtk_window_present and
    the window is snapped to the left or right of the screen.
    
    This patch is based on the patches provided by Yevgen Muntyan
    and Aleksander Morgado.
    
    https://bugzilla.gnome.org/show_bug.cgi?id=698652

 gdk/win32/gdkwindow-win32.c |   15 ++++++++++++---
 1 files changed, 12 insertions(+), 3 deletions(-)
---
diff --git a/gdk/win32/gdkwindow-win32.c b/gdk/win32/gdkwindow-win32.c
index 74b19df..c832940 100644
--- a/gdk/win32/gdkwindow-win32.c
+++ b/gdk/win32/gdkwindow-win32.c
@@ -1132,12 +1132,19 @@ show_window_internal (GdkWindow *window,
     }
   else if (GDK_WINDOW_TYPE (window) == GDK_WINDOW_TEMP || !focus_on_map)
     {
-      ShowWindow (GDK_WINDOW_HWND (window), SW_SHOWNOACTIVATE);
+      if (!IsWindowVisible (GDK_WINDOW_HWND (window)))
+        ShowWindow (GDK_WINDOW_HWND (window), SW_SHOWNOACTIVATE);
+      else
+        ShowWindow (GDK_WINDOW_HWND (window), SW_SHOWNA);
     }
-  else
+  else if (!IsWindowVisible (GDK_WINDOW_HWND (window)))
     {
       ShowWindow (GDK_WINDOW_HWND (window), SW_SHOWNORMAL);
     }
+  else
+    {
+      ShowWindow (GDK_WINDOW_HWND (window), SW_SHOW);
+    }
 
   /* Sync STATE_ABOVE to TOPMOST */
   if (GDK_WINDOW_TYPE (window) != GDK_WINDOW_TEMP &&
@@ -2996,8 +3003,10 @@ gdk_win32_window_focus (GdkWindow *window,
     ShowWindow (GDK_WINDOW_HWND (window), SW_SHOWMAXIMIZED);
   else if (window->state & GDK_WINDOW_STATE_ICONIFIED)
     ShowWindow (GDK_WINDOW_HWND (window), SW_RESTORE);
-  else
+  else if (!IsWindowVisible (GDK_WINDOW_HWND (window)))
     ShowWindow (GDK_WINDOW_HWND (window), SW_SHOWNORMAL);
+  else
+    ShowWindow (GDK_WINDOW_HWND (window), SW_SHOW);
 
   SetFocus (GDK_WINDOW_HWND (window));
 }


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]