X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/c49ba2113c3788115ec7134d2a5f37d0f4776c88..440ddb750f4b9d9a4bb968a4f2ee07f3b307cf17:/src/gtk/toplevel.cpp diff --git a/src/gtk/toplevel.cpp b/src/gtk/toplevel.cpp index 57709a5eb0..1bcc3ce8e9 100644 --- a/src/gtk/toplevel.cpp +++ b/src/gtk/toplevel.cpp @@ -421,6 +421,7 @@ bool wxGetFrameExtents(GdkWindow* window, int* left, int* right, int* top, int* #endif } +#ifdef GDK_WINDOWING_X11 //----------------------------------------------------------------------------- // "property_notify_event" from m_widget //----------------------------------------------------------------------------- @@ -469,6 +470,7 @@ static gboolean request_frame_extents_timeout(void* data) return false; } } +#endif // GDK_WINDOWING_X11 // ---------------------------------------------------------------------------- // wxTopLevelWindowGTK creation @@ -638,9 +640,16 @@ bool wxTopLevelWindowGTK::Create( wxWindow *parent, g_signal_connect_after (m_widget, "focus_out_event", G_CALLBACK (gtk_frame_focus_out_callback), this); - gtk_widget_add_events(m_widget, GDK_PROPERTY_CHANGE_MASK); - g_signal_connect(m_widget, "property_notify_event", - G_CALLBACK(property_notify_event), this); +#ifdef GDK_WINDOWING_X11 +#ifdef __WXGTK3__ + if (GDK_IS_X11_SCREEN(gtk_window_get_screen(GTK_WINDOW(m_widget)))) +#endif + { + gtk_widget_add_events(m_widget, GDK_PROPERTY_CHANGE_MASK); + g_signal_connect(m_widget, "property_notify_event", + G_CALLBACK(property_notify_event), this); + } +#endif // GDK_WINDOWING_X11 // translate wx decorations styles into Motif WM hints (they are recognized // by other WMs as well) @@ -854,28 +863,22 @@ bool wxTopLevelWindowGTK::Show( bool show ) { wxASSERT_MSG( (m_widget != NULL), wxT("invalid frame") ); +#ifdef GDK_WINDOWING_X11 bool deferShow = show && !m_isShown && m_deferShow; if (deferShow) { - deferShow = gs_requestFrameExtentsStatus != 2 && - m_deferShowAllowed && !gtk_widget_get_realized(m_widget); - if (deferShow) - { - deferShow = g_signal_handler_find(m_widget, + deferShow = m_deferShowAllowed && gs_requestFrameExtentsStatus != 2 && + !gtk_widget_get_realized(m_widget) && + 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) != 0; - } - GdkScreen* screen = NULL; + 0, NULL, NULL, this); if (deferShow) { -#ifdef GDK_WINDOWING_X11 - screen = gtk_widget_get_screen(m_widget); + GdkScreen* screen = gtk_widget_get_screen(m_widget); GdkAtom atom = gdk_atom_intern("_NET_REQUEST_FRAME_EXTENTS", false); deferShow = gdk_x11_screen_supports_net_wm_hint(screen, atom) != 0; -#else - deferShow = false; -#endif + // If _NET_REQUEST_FRAME_EXTENTS not supported, don't allow changes // to m_decorSize, it breaks saving/restoring window size with // GetSize()/SetSize() because it makes window bigger between each @@ -913,7 +916,6 @@ bool wxTopLevelWindowGTK::Show( bool show ) gtk_widget_set_allocation(m_widget, &alloc); } -#ifdef GDK_WINDOWING_X11 // send _NET_REQUEST_FRAME_EXTENTS XClientMessageEvent xevent; memset(&xevent, 0, sizeof(xevent)); @@ -928,7 +930,6 @@ bool wxTopLevelWindowGTK::Show( bool show ) XSendEvent(display, DefaultRootWindow(display), false, SubstructureNotifyMask | SubstructureRedirectMask, (XEvent*)&xevent); -#endif // GDK_WINDOWING_X11 if (gs_requestFrameExtentsStatus == 0) { @@ -942,6 +943,7 @@ bool wxTopLevelWindowGTK::Show( bool show ) m_isShown = true; return true; } +#endif // GDK_WINDOWING_X11 if (show && !gtk_widget_get_realized(m_widget)) { @@ -1020,8 +1022,6 @@ void wxTopLevelWindowGTK::DoSetSize( int x, int y, int width, int height, int si { wxCHECK_RET( m_widget, wxT("invalid frame") ); - m_deferShowAllowed = true; - // deal with the position first int old_x = m_x; int old_y = m_y; @@ -1055,6 +1055,8 @@ void wxTopLevelWindowGTK::DoSetSize( int x, int y, int width, int height, int si if (m_height < 1) m_height = 1; if (m_width != oldSize.x || m_height != oldSize.y) { + m_deferShowAllowed = true; + int w, h; GTKDoGetSize(&w, &h); gtk_window_resize(GTK_WINDOW(m_widget), w, h); @@ -1139,6 +1141,7 @@ void wxTopLevelWindowGTK::DoSetSizeHints( int minW, int minH, (GtkWindow*)m_widget, NULL, &hints, (GdkWindowHints)hints_mask); } +#ifdef GDK_WINDOWING_X11 void wxTopLevelWindowGTK::GTKUpdateDecorSize(const wxSize& decorSize) { if (!IsMaximized() && !IsFullScreen()) @@ -1192,6 +1195,7 @@ void wxTopLevelWindowGTK::GTKUpdateDecorSize(const wxSize& decorSize) HandleWindowEvent(showEvent); } } +#endif // GDK_WINDOWING_X11 wxSize& wxTopLevelWindowGTK::GetCachedDecorSize() {