[gtk+/gtk-2-24-quartz] win32: Make set_keep_above work also for non-mapped windows
- From: John Ralls <jralls src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gtk+/gtk-2-24-quartz] win32: Make set_keep_above work also for non-mapped windows
- Date: Wed, 23 Nov 2011 22:59:42 +0000 (UTC)
commit 55bbf0a642da7c3b6502ea243395310a4e30a328
Author: Alexander Larsson <alexl redhat com>
Date: Wed Oct 26 11:08:33 2011 +0200
win32: Make set_keep_above work also for non-mapped windows
This fixes bug #171456
gdk/win32/gdkwindow-win32.c | 42 +++++++++++++++++++++---------------------
1 files changed, 21 insertions(+), 21 deletions(-)
---
diff --git a/gdk/win32/gdkwindow-win32.c b/gdk/win32/gdkwindow-win32.c
index 2031e57..3b9b915 100644
--- a/gdk/win32/gdkwindow-win32.c
+++ b/gdk/win32/gdkwindow-win32.c
@@ -992,7 +992,6 @@ show_window_internal (GdkWindow *window,
HWND old_active_window;
gboolean focus_on_map = FALSE;
DWORD exstyle;
- HWND top;
private = (GdkWindowObject *) window;
@@ -1039,17 +1038,6 @@ show_window_internal (GdkWindow *window,
exstyle = GetWindowLong (GDK_WINDOW_HWND (window), GWL_EXSTYLE);
- if (private->state & GDK_WINDOW_STATE_BELOW)
- exstyle &= (~WS_EX_TOPMOST);
-
- if (private->state & GDK_WINDOW_STATE_ABOVE)
- exstyle |= WS_EX_TOPMOST;
-
- if (exstyle & WS_EX_TOPMOST)
- top = HWND_TOPMOST;
- else
- top = HWND_TOP;
-
/* Use SetWindowPos to show transparent windows so automatic redraws
* in other windows can be suppressed.
*/
@@ -1060,7 +1048,7 @@ show_window_internal (GdkWindow *window,
if (GDK_WINDOW_TYPE (window) == GDK_WINDOW_TEMP || !focus_on_map)
flags |= SWP_NOACTIVATE;
- SetWindowPos (GDK_WINDOW_HWND (window), top, 0, 0, 0, 0, flags);
+ SetWindowPos (GDK_WINDOW_HWND (window), HWND_TOP, 0, 0, 0, 0, flags);
return;
}
@@ -1088,6 +1076,18 @@ show_window_internal (GdkWindow *window,
{
ShowWindow (GDK_WINDOW_HWND (window), SW_SHOWNORMAL);
}
+
+ /* Sync STATE_ABOVE to TOPMOST */
+ if (((private->state & GDK_WINDOW_STATE_ABOVE) &&
+ !(exstyle & WS_EX_TOPMOST)) ||
+ (!(private->state & GDK_WINDOW_STATE_ABOVE) &&
+ (exstyle & WS_EX_TOPMOST)))
+ {
+ API_CALL (SetWindowPos, (GDK_WINDOW_HWND (window),
+ (private->state & GDK_WINDOW_STATE_ABOVE)?HWND_TOPMOST:HWND_NOTOPMOST,
+ 0, 0, 0, 0,
+ SWP_NOSIZE | SWP_NOMOVE | SWP_NOACTIVATE));
+ }
}
static void
@@ -3438,10 +3438,10 @@ gdk_window_set_keep_above (GdkWindow *window,
0, 0, 0, 0,
SWP_NOSIZE | SWP_NOMOVE | SWP_NOACTIVATE));
}
- else
- gdk_synthesize_window_state (window,
- setting ? GDK_WINDOW_STATE_BELOW : GDK_WINDOW_STATE_ABOVE,
- setting ? GDK_WINDOW_STATE_ABOVE : 0);
+
+ gdk_synthesize_window_state (window,
+ setting ? GDK_WINDOW_STATE_BELOW : GDK_WINDOW_STATE_ABOVE,
+ setting ? GDK_WINDOW_STATE_ABOVE : 0);
}
void
@@ -3464,10 +3464,10 @@ gdk_window_set_keep_below (GdkWindow *window,
0, 0, 0, 0,
SWP_NOSIZE | SWP_NOMOVE | SWP_NOACTIVATE));
}
- else
- gdk_synthesize_window_state (window,
- setting ? GDK_WINDOW_STATE_ABOVE : GDK_WINDOW_STATE_BELOW,
- setting ? GDK_WINDOW_STATE_BELOW : 0);
+
+ gdk_synthesize_window_state (window,
+ setting ? GDK_WINDOW_STATE_ABOVE : GDK_WINDOW_STATE_BELOW,
+ setting ? GDK_WINDOW_STATE_BELOW : 0);
}
void
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]