static void
show_window_internal (GdkWindow *window,
- gboolean raise,
+ gboolean already_mapped,
gboolean deiconify)
{
HWND old_active_window;
- gboolean focus_on_map = TRUE;
+ gboolean focus_on_map = FALSE;
DWORD exstyle;
HWND top;
if (window->destroyed)
return;
- GDK_NOTE (MISC, g_print ("show_window_internal: %p: %s%s%s\n",
+ GDK_NOTE (MISC, g_print ("show_window_internal: %p: %s%s\n",
GDK_WINDOW_HWND (window),
_gdk_win32_window_state_to_string (window->state),
- (raise ? " raise" : ""),
(deiconify ? " deiconify" : "")));
/* If asked to show (not deiconify) an withdrawn and iconified
* window, do that.
*/
if (!deiconify &&
- !GDK_WINDOW_IS_MAPPED (window) &&
+ !already_mapped &&
(window->state & GDK_WINDOW_STATE_ICONIFIED))
{
- ShowWindow (GDK_WINDOW_HWND (window), SW_MINIMIZE);
+ ShowWindow (GDK_WINDOW_HWND (window), SW_SHOWMINNOACTIVE);
return;
}
/* If asked to show (but not raise) a window that is already
* visible, do nothing.
*/
- if (!deiconify && !raise && IsWindowVisible (GDK_WINDOW_HWND (window)))
+ if (!deiconify && !already_mapped && IsWindowVisible (GDK_WINDOW_HWND (window)))
return;
/* Other cases */
- if (!GDK_WINDOW_IS_MAPPED (window))
- {
- gdk_synthesize_window_state (window,
- GDK_WINDOW_STATE_WITHDRAWN,
- 0);
- focus_on_map = window->focus_on_map;
- }
+ if (!already_mapped)
+ focus_on_map = window->focus_on_map;
exstyle = GetWindowLong (GDK_WINDOW_HWND (window), GWL_EXSTYLE);
*/
if (exstyle & WS_EX_TRANSPARENT)
{
- UINT flags = SWP_SHOWWINDOW | SWP_NOREDRAW | SWP_NOMOVE | SWP_NOSIZE;
+ UINT flags = SWP_SHOWWINDOW | SWP_NOREDRAW | SWP_NOMOVE | SWP_NOSIZE | SWP_NOZORDER;
- if (!raise)
- flags |= SWP_NOZORDER;
- if (!raise || GDK_WINDOW_TYPE (window) == GDK_WINDOW_TEMP || !focus_on_map)
+ 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);
return;
}
- old_active_window = GetActiveWindow ();
-
if (window->state & GDK_WINDOW_STATE_FULLSCREEN)
{
gdk_window_fullscreen (window);
}
else if (window->state & GDK_WINDOW_STATE_ICONIFIED)
{
- ShowWindow (GDK_WINDOW_HWND (window), SW_RESTORE);
+ if (focus_on_map)
+ ShowWindow (GDK_WINDOW_HWND (window), SW_RESTORE);
+ else
+ ShowWindow (GDK_WINDOW_HWND (window), SW_SHOWNOACTIVATE);
}
else if (GDK_WINDOW_TYPE (window) == GDK_WINDOW_TEMP || !focus_on_map)
{
{
ShowWindow (GDK_WINDOW_HWND (window), SW_SHOWNORMAL);
}
-
- if (raise)
- {
- if (GDK_WINDOW_TYPE (window) == GDK_WINDOW_TEMP)
- SetWindowPos (GDK_WINDOW_HWND (window), HWND_TOPMOST,
- 0, 0, 0, 0,
- SWP_NOACTIVATE | SWP_NOMOVE | SWP_NOSIZE);
- else if (GDK_WINDOW_TYPE (window) == GDK_WINDOW_TOPLEVEL)
- {
- if (focus_on_map && window->accept_focus)
- {
- SetForegroundWindow (GDK_WINDOW_HWND (window));
- if (top == HWND_TOPMOST)
- SetWindowPos (GDK_WINDOW_HWND (window), top,
- 0, 0, 0, 0,
- SWP_NOACTIVATE | SWP_NOMOVE | SWP_NOSIZE);
- }
- else
- {
- SetWindowPos (GDK_WINDOW_HWND (window), top,
- 0, 0, 0, 0,
- SWP_NOACTIVATE | SWP_NOMOVE | SWP_NOSIZE);
- }
- }
- else
- {
- BringWindowToTop (GDK_WINDOW_HWND (window));
- }
- }
- else if (old_active_window != GDK_WINDOW_HWND (window))
- {
- SetActiveWindow (old_active_window);
- }
}
static void
if (GDK_WINDOW_IS_MAPPED (window))
{
- show_window_internal (window, FALSE, TRUE);
+ show_window_internal (window, GDK_WINDOW_IS_MAPPED (window), TRUE);
}
else
{