Blob Blame History Raw
diff -rupN wxWidgets-3.0.2/src/gtk/toplevel.cpp wxWidgets-3.0.2-wayland/src/gtk/toplevel.cpp
--- wxWidgets-3.0.2/src/gtk/toplevel.cpp	2014-10-06 17:33:44.000000000 -0400
+++ wxWidgets-3.0.2-wayland/src/gtk/toplevel.cpp	2015-12-31 14:48:25.873812357 -0500
@@ -456,8 +456,12 @@ gtk_frame_window_state_callback( GtkWidg
 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);
     GdkDisplay* display = gdk_window_get_display(window);
+
+    if (!GDK_IS_X11_DISPLAY(display))
+        return false;
+
+    static GdkAtom property = gdk_atom_intern("_NET_FRAME_EXTENTS", false);
     Atom xproperty = gdk_x11_atom_to_xatom_for_display(display, property);
     Atom type;
     int format;
@@ -852,10 +856,19 @@ bool wxTopLevelWindowGTK::ShowFullScreen
 
     m_fsIsShowing = show;
 
+    wxX11FullScreenMethod method = wxX11_FS_WMSPEC;
+    Display* xdpy = NULL;
+    Window xroot = None;
+
 #ifdef GDK_WINDOWING_X11
-    Display* xdpy = GDK_DISPLAY_XDISPLAY(gtk_widget_get_display(m_widget));
-    Window xroot = GDK_WINDOW_XID(gtk_widget_get_root_window(m_widget));
-    wxX11FullScreenMethod method = wxGetFullScreenMethodX11(xdpy, (WXWindow)xroot);
+    GdkDisplay *display = gtk_widget_get_display(m_widget);
+
+    if (GDK_IS_X11_DISPLAY(display))
+    {
+        xdpy = GDK_DISPLAY_XDISPLAY(gtk_widget_get_display(m_widget));
+        xroot = GDK_WINDOW_XID(gtk_widget_get_root_window(m_widget));
+        method = wxGetFullScreenMethodX11(xdpy, (WXWindow)xroot);
+    }
 
     // NB: gtk_window_fullscreen() uses freedesktop.org's WMspec extensions
     //     to switch to fullscreen, which is not always available. We must
@@ -870,7 +883,7 @@ bool wxTopLevelWindowGTK::ShowFullScreen
             gtk_window_unfullscreen( GTK_WINDOW( m_widget ) );
     }
 #ifdef GDK_WINDOWING_X11
-    else
+    else if (xdpy != NULL)
     {
         GdkWindow* window = gtk_widget_get_window(m_widget);
         Window xid = GDK_WINDOW_XID(window);
@@ -958,6 +971,7 @@ bool wxTopLevelWindowGTK::Show( bool sho
         deferShow = m_deferShowAllowed &&
             gs_requestFrameExtentsStatus != RFE_STATUS_BROKEN &&
             !gtk_widget_get_realized(m_widget) &&
+            GDK_IS_X11_DISPLAY(gtk_widget_get_display(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),
diff -rupN wxWidgets-3.0.2/src/gtk/window.cpp wxWidgets-3.0.2-wayland/src/gtk/window.cpp
--- wxWidgets-3.0.2/src/gtk/window.cpp	2014-10-06 17:33:44.000000000 -0400
+++ wxWidgets-3.0.2-wayland/src/gtk/window.cpp	2015-12-31 14:48:31.522812743 -0500
@@ -780,28 +780,31 @@ wxTranslateGTKKeyEventToWx(wxKeyEvent& e
             }
 
 #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
-            // Shift) should result in the same key code in OnKeyDown():
-            // '5' (although OnChar() will get either '5' or '%').
-            //
-            // to do it we first translate keysym to keycode (== scan code)
-            // and then back but always using the lower register
-            Display *dpy = (Display *)wxGetDisplay();
-            KeyCode keycode = XKeysymToKeycode(dpy, keysym);
+            if (GDK_IS_X11_DISPLAY(gdk_window_get_display(gdk_event->window)))
+            {
+                // 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
+                // Shift) should result in the same key code in OnKeyDown():
+                // '5' (although OnChar() will get either '5' or '%').
+                //
+                // to do it we first translate keysym to keycode (== scan code)
+                // and then back but always using the lower register
+                Display *dpy = (Display *)wxGetDisplay();
+                KeyCode keycode = XKeysymToKeycode(dpy, keysym);
 
-            wxLogTrace(TRACE_KEYS, wxT("\t-> keycode %d"), keycode);
+                wxLogTrace(TRACE_KEYS, wxT("\t-> keycode %d"), keycode);
 
 #ifdef HAVE_X11_XKBLIB_H
-            KeySym keysymNormalized = XkbKeycodeToKeysym(dpy, keycode, 0, 0);
+                KeySym keysymNormalized = XkbKeycodeToKeysym(dpy, keycode, 0, 0);
 #else
-            KeySym keysymNormalized = XKeycodeToKeysym(dpy, keycode, 0);
+                KeySym keysymNormalized = XKeycodeToKeysym(dpy, keycode, 0);
 #endif
 
-            // use the normalized, i.e. lower register, keysym if we've
-            // got one
-            key_code = keysymNormalized ? keysymNormalized : keysym;
+                // use the normalized, i.e. lower register, keysym if we've
+                // got one
+                key_code = keysymNormalized ? keysymNormalized : keysym;
+            }
 #else
             key_code = keysym;
 #endif