diff options
Diffstat (limited to 'gdk/win32')
-rw-r--r-- | gdk/win32/gdkevents-win32.c | 25 | ||||
-rw-r--r-- | gdk/win32/gdkwin32.h | 1 |
2 files changed, 23 insertions, 3 deletions
diff --git a/gdk/win32/gdkevents-win32.c b/gdk/win32/gdkevents-win32.c index f241943cb9..3683bc3a57 100644 --- a/gdk/win32/gdkevents-win32.c +++ b/gdk/win32/gdkevents-win32.c @@ -144,6 +144,9 @@ static gint current_root_x, current_root_y; static UINT msh_mousewheel; static UINT client_message; +static UINT got_gdk_events_message; +static HWND modal_win32_dialog = NULL; + #ifdef HAVE_DIMM_H static IActiveIMMApp *active_imm_app = NULL; static IActiveIMMMessagePumpOwner *active_imm_msgpump_owner = NULL; @@ -281,6 +284,9 @@ inner_window_procedure (HWND hwnd, /* If gdk_event_translate() returns TRUE, we return ret_val from * the window procedure. */ + if (modal_win32_dialog) + PostMessage (modal_win32_dialog, got_gdk_events_message, + (WPARAM) 1, 0); return ret_val; } else @@ -379,6 +385,7 @@ _gdk_events_init (void) msh_mousewheel = RegisterWindowMessage ("MSWHEEL_ROLLMSG"); client_message = RegisterWindowMessage ("GDK_WIN32_CLIENT_MESSAGE"); + got_gdk_events_message = RegisterWindowMessage ("GDK_WIN32_GOT_EVENTS"); #if 0 /* Check if we have some input locale identifier loaded that uses a @@ -463,7 +470,8 @@ gdk_events_pending (void) { MSG msg; return (_gdk_event_queue_find_first (_gdk_display) || - PeekMessage (&msg, NULL, 0, 0, PM_NOREMOVE)); + (modal_win32_dialog == NULL && + PeekMessage (&msg, NULL, 0, 0, PM_NOREMOVE))); } GdkEvent* @@ -3516,6 +3524,9 @@ _gdk_events_queue (GdkDisplay *display) { MSG msg; + if (modal_win32_dialog != NULL) + return; + while (!_gdk_event_queue_find_first (display) && PeekMessage (&msg, NULL, 0, 0, PM_REMOVE)) { @@ -3536,7 +3547,8 @@ gdk_event_prepare (GSource *source, *timeout = -1; retval = (_gdk_event_queue_find_first (_gdk_display) != NULL || - PeekMessage (&msg, NULL, 0, 0, PM_NOREMOVE)); + (modal_win32_dialog == NULL && + PeekMessage (&msg, NULL, 0, 0, PM_NOREMOVE))); GDK_THREADS_LEAVE (); @@ -3553,7 +3565,8 @@ gdk_event_check (GSource *source) if (event_poll_fd.revents & G_IO_IN) retval = (_gdk_event_queue_find_first (_gdk_display) != NULL || - PeekMessage (&msg, NULL, 0, 0, PM_NOREMOVE)); + (modal_win32_dialog == NULL && + PeekMessage (&msg, NULL, 0, 0, PM_NOREMOVE))); else retval = FALSE; @@ -3587,6 +3600,12 @@ gdk_event_dispatch (GSource *source, return TRUE; } +void +gdk_win32_set_modal_dialog_libgtk_only (HWND window) +{ + modal_win32_dialog = window; +} + static void check_for_too_much_data (GdkEvent *event) { diff --git a/gdk/win32/gdkwin32.h b/gdk/win32/gdkwin32.h index 37e6cbc762..1e79ce94cb 100644 --- a/gdk/win32/gdkwin32.h +++ b/gdk/win32/gdkwin32.h @@ -87,6 +87,7 @@ void gdk_win32_selection_add_targets (GdkWindow *owner, /* For internal GTK use only */ GdkPixbuf * gdk_win32_icon_to_pixbuf_libgtk_only (HICON hicon); HICON gdk_win32_pixbuf_to_hicon_libgtk_only (GdkPixbuf *pixbuf); +void gdk_win32_set_modal_dialog_libgtk_only (HWND window); G_END_DECLS |