< 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 >