static VALUE device_s_set_extension_events(VALUE self, VALUE window, VALUE mask, VALUE mode) { gdk_input_set_extension_events(GDK_WINDOW(RVAL2GOBJ(window)), NUM2INT(mask), FIX2INT(mode)); return Qnil; }
/** * Change event handling between XInput and Core */ void gtk_xournal_update_xevent(GtkWidget* widget) { g_return_if_fail(widget != NULL); g_return_if_fail(GTK_IS_XOURNAL(widget)); GtkXournal* xournal = GTK_XOURNAL(widget); Settings* settings = xournal->view->getControl()->getSettings(); if (!gtk_check_version(2, 17, 0)) { /* GTK+ 2.17 and later: everybody shares a single native window, so we'll never get any core events, and we might as well set extension events the way we're supposed to. Doing so helps solve crasher bugs in 2.17, and prevents us from losing two-button events in 2.18 */ gtk_widget_set_extension_events(widget, settings->isUseXInput() ? GDK_EXTENSION_EVENTS_ALL : GDK_EXTENSION_EVENTS_NONE); } else { /* GTK+ 2.16 and earlier: we only activate extension events on the PageViews's parent GdkWindow. This allows us to keep receiving core events. */ gdk_input_set_extension_events(widget->window, GDK_POINTER_MOTION_MASK | GDK_BUTTON_MOTION_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK, settings->isUseXInput() ? GDK_EXTENSION_EVENTS_ALL : GDK_EXTENSION_EVENTS_NONE); } }