From: Robert Roebling Date: Wed, 27 Oct 2010 19:42:38 +0000 (+0000) Subject: Use window-state-event to send ICONIZE events under GTK+, probably fixes #10973:... X-Git-Url: https://git.saurik.com/wxWidgets.git/commitdiff_plain/f0f0542da6ba95ffab9b96580aadf5092cecfc71 Use window-state-event to send ICONIZE events under GTK+, probably fixes #10973: Iconize event triggered when switching workspaces with Ctrl+Alt+[Arrow Key] git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@65932 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- diff --git a/src/gtk/toplevel.cpp b/src/gtk/toplevel.cpp index 5a77576b0a..6c3104837b 100644 --- a/src/gtk/toplevel.cpp +++ b/src/gtk/toplevel.cpp @@ -339,7 +339,6 @@ gtk_frame_map_callback( GtkWidget*, wxTopLevelWindow *win ) { const bool wasIconized = win->IsIconized(); - win->SetIconizeState(false); if (wasIconized) { // Because GetClientSize() returns (0,0) when IsIconized() is true, @@ -372,19 +371,25 @@ gtk_frame_map_callback( GtkWidget*, } //----------------------------------------------------------------------------- -// "unmap_event" from m_widget +// "window-state-event" from m_widget //----------------------------------------------------------------------------- extern "C" { static gboolean -gtk_frame_unmap_callback( GtkWidget * WXUNUSED(widget), - GdkEvent * WXUNUSED(event), +gtk_frame_window_state_callback( GtkWidget* WXUNUSED(widget), + GdkEventWindowState *event, wxTopLevelWindow *win ) { - // hiding the window doesn't count as minimizing it - if (win->IsShown()) - win->SetIconizeState(true); - return false; + + if (event->changed_mask && GDK_WINDOW_STATE_ICONIFIED) + { + if (event->new_window_state && GDK_WINDOW_STATE_ICONIFIED) + win->SetIconizeState(true); + else + win->SetIconizeState(false); + } + + return FALSE; } } @@ -594,11 +599,14 @@ bool wxTopLevelWindowGTK::Create( wxWindow *parent, g_signal_connect (m_widget, "realize", G_CALLBACK (gtk_frame_realized_callback), this); - // map and unmap for iconized state + // for some reported size corrections g_signal_connect (m_widget, "map_event", G_CALLBACK (gtk_frame_map_callback), this); - g_signal_connect (m_widget, "unmap_event", - G_CALLBACK (gtk_frame_unmap_callback), this); + + // for iconized state + g_signal_connect (m_widget, "window_state_event", + G_CALLBACK (gtk_frame_window_state_callback), this); + // for wxMoveEvent g_signal_connect (m_widget, "configure_event",