From 3b81515cb19f17208db39eb959b646f185de61a4 Mon Sep 17 00:00:00 2001 From: Vadim Zeitlin Date: Sun, 26 Feb 2012 17:18:41 +0000 Subject: [PATCH] Fix wxGTK compilation when using non X11-based GDK. Only use X11-specific GDK functions inside "#ifdef GDK_WINDOWING_X11" checks. Closes #14044. git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@70701 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- src/gtk/app.cpp | 2 ++ src/gtk/dcscreen.cpp | 2 ++ src/gtk/taskbar.cpp | 4 ++++ src/gtk/toplevel.cpp | 28 ++++++++++++++++++++++++++++ src/gtk/utilsgtk.cpp | 5 +++++ src/gtk/window.cpp | 12 +++++++++++- 6 files changed, 52 insertions(+), 1 deletion(-) diff --git a/src/gtk/app.cpp b/src/gtk/app.cpp index a4029e2..7de062b 100644 --- a/src/gtk/app.cpp +++ b/src/gtk/app.cpp @@ -38,7 +38,9 @@ #include #endif // wxUSE_LIBHILDON2 +#ifdef GDK_WINDOWING_X11 #include +#endif //----------------------------------------------------------------------------- // link GnomeVFS diff --git a/src/gtk/dcscreen.cpp b/src/gtk/dcscreen.cpp index a58d606..935f9be 100644 --- a/src/gtk/dcscreen.cpp +++ b/src/gtk/dcscreen.cpp @@ -14,7 +14,9 @@ #include "wx/gtk/dcscreen.h" #include +#ifdef GDK_WINDOWING_X11 #include +#endif //----------------------------------------------------------------------------- // wxScreenDCImpl diff --git a/src/gtk/taskbar.cpp b/src/gtk/taskbar.cpp index cea57e9..e45534a 100644 --- a/src/gtk/taskbar.cpp +++ b/src/gtk/taskbar.cpp @@ -116,6 +116,7 @@ status_icon_popup_menu(GtkStatusIcon*, guint, guint, wxTaskBarIcon* taskBarIcon) bool wxTaskBarIconBase::IsAvailable() { +#ifdef GDK_WINDOWING_X11 char name[32]; g_snprintf(name, sizeof(name), "_NET_SYSTEM_TRAY_S%d", gdk_x11_get_default_screen()); @@ -124,6 +125,9 @@ bool wxTaskBarIconBase::IsAvailable() Window manager = XGetSelectionOwner(gdk_x11_get_default_xdisplay(), atom); return manager != None; +#else + return true; +#endif } //----------------------------------------------------------------------------- diff --git a/src/gtk/toplevel.cpp b/src/gtk/toplevel.cpp index bec8ad8..97b5526 100644 --- a/src/gtk/toplevel.cpp +++ b/src/gtk/toplevel.cpp @@ -36,15 +36,21 @@ #include "wx/sysopt.h" #include +#ifdef GDK_WINDOWING_X11 #include +#endif #include "wx/gtk/private/win_gtk.h" +#ifdef GDK_WINDOWING_X11 + #include "wx/unix/utilsx11.h" // XA_CARDINAL #include +#endif // GDK_WINDOWING_X11 + #if wxUSE_LIBHILDON #include #include @@ -90,6 +96,7 @@ static void wxgtk_window_set_urgency_hint (GtkWindow *win, else #endif { +#ifdef GDK_WINDOWING_X11 GdkWindow* window = gtk_widget_get_window(GTK_WIDGET(win)); wxCHECK_RET(window, "wxgtk_window_set_urgency_hint: GdkWindow not realized"); @@ -107,6 +114,7 @@ static void wxgtk_window_set_urgency_hint (GtkWindow *win, XSetWMHints(dpy, xid, wm_hints); XFree(wm_hints); +#endif // GDK_WINDOWING_X11 } } #define gtk_window_set_urgency_hint wxgtk_window_set_urgency_hint @@ -399,6 +407,7 @@ gtk_frame_window_state_callback( GtkWidget* WXUNUSED(widget), bool wxGetFrameExtents(GdkWindow* window, int* left, int* right, int* top, int* bottom) { +#ifdef GDK_WINDOWING_X11 static GdkAtom property = gdk_atom_intern("_NET_FRAME_EXTENTS", false); Atom xproperty = gdk_x11_atom_to_xatom_for_display( gdk_drawable_get_display(window), property); @@ -424,6 +433,9 @@ bool wxGetFrameExtents(GdkWindow* window, int* left, int* right, int* top, int* if (data) XFree(data); return success; +#else + return false; +#endif } //----------------------------------------------------------------------------- @@ -758,6 +770,7 @@ bool wxTopLevelWindowGTK::ShowFullScreen(bool show, long) m_fsIsShowing = show; +#ifdef GDK_WINDOWING_X11 wxX11FullScreenMethod method = wxGetFullScreenMethodX11((WXDisplay*)GDK_DISPLAY(), (WXWindow)GDK_ROOT_WINDOW()); @@ -767,12 +780,14 @@ bool wxTopLevelWindowGTK::ShowFullScreen(bool show, long) // check if WM supports the spec and use legacy methods if it // doesn't. if ( method == wxX11_FS_WMSPEC ) +#endif // GDK_WINDOWING_X11 { if (show) gtk_window_fullscreen( GTK_WINDOW( m_widget ) ); else gtk_window_unfullscreen( GTK_WINDOW( m_widget ) ); } +#ifdef GDK_WINDOWING_X11 else { GdkWindow* window = gtk_widget_get_window(m_widget); @@ -821,6 +836,7 @@ bool wxTopLevelWindowGTK::ShowFullScreen(bool show, long) m_fsSaveFrame.width, m_fsSaveFrame.height); } } +#endif // GDK_WINDOWING_X11 // documented behaviour is to show the window if it's still hidden when // showing it full screen @@ -866,9 +882,13 @@ bool wxTopLevelWindowGTK::Show( bool show ) GdkScreen* screen = NULL; if (deferShow) { +#ifdef GDK_WINDOWING_X11 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 @@ -906,6 +926,7 @@ 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)); @@ -920,6 +941,7 @@ bool wxTopLevelWindowGTK::Show( bool show ) XSendEvent(display, DefaultRootWindow(display), false, SubstructureNotifyMask | SubstructureRedirectMask, (XEvent*)&xevent); +#endif // GDK_WINDOWING_X11 if (gs_requestFrameExtentsStatus == 0) { @@ -1377,6 +1399,7 @@ void wxTopLevelWindowGTK::SetWindowStyleFlag( long style ) } } +#ifdef GDK_WINDOWING_X11 /* Get the X Window between child and the root window. This should usually be the WM managed XID */ static Window wxGetTopmostWindowX11(Display *dpy, Window child) @@ -1396,6 +1419,7 @@ static Window wxGetTopmostWindowX11(Display *dpy, Window child) return child; } +#endif // GDK_WINDOWING_X11 bool wxTopLevelWindowGTK::SetTransparent(wxByte alpha) { @@ -1405,6 +1429,7 @@ bool wxTopLevelWindowGTK::SetTransparent(wxByte alpha) if (window == NULL) return false; +#ifdef GDK_WINDOWING_X11 Display* dpy = GDK_WINDOW_XDISPLAY(window); // We need to get the X Window that has the root window as the immediate parent // and m_widget->window as a child. This should be the X Window that the WM manages and @@ -1424,6 +1449,9 @@ bool wxTopLevelWindowGTK::SetTransparent(wxByte alpha) } XSync(dpy, False); return true; +#else // !GDK_WINDOWING_X11 + return false; +#endif // GDK_WINDOWING_X11 / !GDK_WINDOWING_X11 } bool wxTopLevelWindowGTK::CanSetTransparent() diff --git a/src/gtk/utilsgtk.cpp b/src/gtk/utilsgtk.cpp index af08062..abe0d04 100644 --- a/src/gtk/utilsgtk.cpp +++ b/src/gtk/utilsgtk.cpp @@ -27,7 +27,12 @@ #include "wx/evtloop.h" #include +#ifdef GDK_WINDOWING_WIN32 +#include +#endif +#ifdef GDK_WINDOWING_X11 #include +#endif #if wxDEBUG_LEVEL #include "wx/gtk/assertdlg_gtk.h" diff --git a/src/gtk/window.cpp b/src/gtk/window.cpp index 5717ec8..d30f6f9 100644 --- a/src/gtk/window.cpp +++ b/src/gtk/window.cpp @@ -41,7 +41,11 @@ #include "wx/gtk/private/event.h" using namespace wxGTKImpl; +#ifdef GDK_WINDOWING_X11 #include +#else +typedef guint KeySym; +#endif #include #if GTK_CHECK_VERSION(3,0,0) @@ -728,6 +732,7 @@ wxTranslateGTKKeyEventToWx(wxKeyEvent& event, keysym = (KeySym)gdk_event->string[0]; } +#ifdef GDK_WINDOWING_X11 // we want to always get the same key code when the same key is // pressed regardless of the state of the modifiers, i.e. on a // standard US keyboard pressing '5' or '%' ('5' key with @@ -746,6 +751,9 @@ wxTranslateGTKKeyEventToWx(wxKeyEvent& event, // use the normalized, i.e. lower register, keysym if we've // got one key_code = keysymNormalized ? keysymNormalized : keysym; +#else + key_code = keysym; +#endif // as explained above, we want to have lower register key codes // normally but for the letter keys we want to have the upper ones @@ -3579,11 +3587,13 @@ void wxWindowGTK::WarpPointer( int x, int y ) GdkDeviceManager* manager = gdk_display_get_device_manager(display); gdk_device_warp(gdk_device_manager_get_client_pointer(manager), screen, x, y); #else +#ifdef GDK_WINDOWING_X11 XWarpPointer(GDK_DISPLAY_XDISPLAY(display), None, GDK_WINDOW_XID(gdk_screen_get_root_window(screen)), 0, 0, 0, 0, x, y); #endif +#endif } wxWindowGTK::ScrollDir wxWindowGTK::ScrollDirFromRange(GtkRange *range) const @@ -4088,7 +4098,7 @@ bool wxWindowGTK::SetBackgroundStyle(wxBackgroundStyle style) { // Make sure GDK/X11 doesn't refresh the window // automatically. - gdk_window_set_back_pixmap( window, None, False ); + gdk_window_set_back_pixmap( window, NULL, FALSE ); m_needsStyleChange = false; } else // window not realized yet -- 2.7.4