< prev index next >

modules/javafx.graphics/src/main/native-glass/gtk/glass_window.cpp

Print this page

        

@@ -38,10 +38,13 @@
 #include <X11/extensions/shape.h>
 #include <cairo.h>
 #include <cairo-xlib.h>
 #include <gdk/gdkx.h>
 #include <gdk/gdk.h>
+#ifdef GLASS_GTK3
+#include <gtk/gtkx.h>
+#endif
 
 #include <string.h>
 
 #include <iostream>
 #include <algorithm>

@@ -349,10 +352,15 @@
     jdouble dx = 0;
     jdouble dy = 0;
 
     // converting direction to change in pixels
     switch (event->direction) {
+#if GTK_CHECK_VERSION(3, 4, 0)
+        case GDK_SCROLL_SMOOTH:
+            //FIXME 3.4 ???
+            break;
+#endif
         case GDK_SCROLL_UP:
             dy = 1;
             break;
         case GDK_SCROLL_DOWN:
             dy = -1;

@@ -414,11 +422,25 @@
     jcharArray jChars = NULL;
     jchar key = gdk_keyval_to_unicode(event->keyval);
     if (key >= 'a' && key <= 'z' && (event->state & GDK_CONTROL_MASK)) {
         key = key - 'a' + 1; // map 'a' to ctrl-a, and so on.
     } else {
-        key = glass_gtk_fixup_typed_key(key, event->keyval);
+#ifdef GLASS_GTK2
+        if (key == 0) {
+            // Work around "bug" fixed in gtk-3.0:
+            // http://mail.gnome.org/archives/commits-list/2011-March/msg06832.html
+            switch (event->keyval) {
+            case 0xFF08 /* Backspace */: key =  '\b';
+            case 0xFF09 /* Tab       */: key =  '\t';
+            case 0xFF0A /* Linefeed  */: key =  '\n';
+            case 0xFF0B /* Vert. Tab */: key =  '\v';
+            case 0xFF0D /* Return    */: key =  '\r';
+            case 0xFF1B /* Escape    */: key =  '\033';
+            case 0xFFFF /* Delete    */: key =  '\177';
+            }
+        }
+#endif
     }
 
     if (key > 0) {
         jChars = mainEnv->NewCharArray(1);
         if (jChars) {

@@ -1452,11 +1474,13 @@
         WindowContextBase(),
         parent()
 {
     jwindow = mainEnv->NewGlobalRef(_jwindow);
 
-    gtk_widget = gtk_plug_new((GdkNativeWindow)PTR_TO_JLONG(_owner));
+    WindowContext* parent = ((WindowContext*)JLONG_TO_PTR(_owner));
+    Window win = GDK_WINDOW_XID(parent->get_gdk_window());
+    gtk_widget = gtk_plug_new(win);
 
     g_signal_connect(G_OBJECT(gtk_widget), "configure-event", G_CALLBACK(plug_configure), this);
 
     gtk_widget_set_size_request(gtk_widget, 0, 0);
     gtk_widget_set_events(gtk_widget, GDK_ALL_EVENTS_MASK);

@@ -1778,11 +1802,15 @@
 
     full_screen_window = new WindowContextTop(jwindow, NULL, 0L, UNTITLED,
                                                 NORMAL, (GdkWMFunction) 0);
     int x, y, w, h;
     gdk_window_get_origin(gdk_window, &x, &y);
+#ifdef GLASS_GTK3
+    gdk_window_get_geometry(gdk_window, NULL, NULL, &w, &h);
+#else
     gdk_window_get_geometry(gdk_window, NULL, NULL, &w, &h, NULL);
+#endif
     full_screen_window->set_bounds(x, y, true, true, w, h, -1, -1);
 
     if (WindowContextBase::sm_grab_window == this) {
         ungrab_focus();
     }
< prev index next >