From: Paul Cornett Date: Mon, 17 Mar 2008 04:25:10 +0000 (+0000) Subject: reorganize deferred show logic a bit, to reset m_deferShow properly and avoid realizi... X-Git-Url: https://git.saurik.com/wxWidgets.git/commitdiff_plain/aacd4b50d35ae61a89dfbe83d5c84fa3c66386b6?ds=inline reorganize deferred show logic a bit, to reset m_deferShow properly and avoid realizing unnecessarily git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@52579 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- diff --git a/src/gtk/toplevel.cpp b/src/gtk/toplevel.cpp index 5d90d3a9be..f79d8234e5 100644 --- a/src/gtk/toplevel.cpp +++ b/src/gtk/toplevel.cpp @@ -758,13 +758,19 @@ bool wxTopLevelWindowGTK::Show( bool show ) { wxASSERT_MSG( (m_widget != NULL), wxT("invalid frame") ); - const bool wasRealized = GTK_WIDGET_REALIZED(m_widget); - bool deferShow = - show && m_deferShow && !wasRealized && - g_signal_handler_find(m_widget, - GSignalMatchType(G_SIGNAL_MATCH_ID | G_SIGNAL_MATCH_DATA), - g_signal_lookup("property_notify_event", GTK_TYPE_WIDGET), - 0, NULL, NULL, this); + bool deferShow = show && m_deferShow; + if (deferShow) + { + m_deferShow = + deferShow = !GTK_WIDGET_REALIZED(m_widget) && + gdk_x11_screen_supports_net_wm_hint( + gtk_widget_get_screen(m_widget), + gdk_atom_intern("_NET_REQUEST_FRAME_EXTENTS", false)) && + g_signal_handler_find(m_widget, + GSignalMatchType(G_SIGNAL_MATCH_ID | G_SIGNAL_MATCH_DATA), + g_signal_lookup("property_notify_event", GTK_TYPE_WIDGET), + 0, NULL, NULL, this); + } if (deferShow) { // Initial show. If WM supports _NET_REQUEST_FRAME_EXTENTS, defer @@ -785,13 +791,6 @@ bool wxTopLevelWindowGTK::Show( bool show ) if (alloc_width == 1) m_widget->allocation.width = 1; - m_deferShow = - deferShow = gdk_x11_screen_supports_net_wm_hint( - gdk_drawable_get_screen(m_widget->window), - gdk_atom_intern("_NET_REQUEST_FRAME_EXTENTS", false)) != 0; - } - if (deferShow) - { // send _NET_REQUEST_FRAME_EXTENTS XClientMessageEvent xevent; memset(&xevent, 0, sizeof(xevent)); @@ -811,7 +810,7 @@ bool wxTopLevelWindowGTK::Show( bool show ) return true; } - if (show && !wasRealized) + if (show && !GTK_WIDGET_REALIZED(m_widget)) { // size_allocate signals occur in reverse order (bottom to top). // Things work better if the initial wxSizeEvents are sent (from the