コード例 #1
0
static void
add_device_presence_filter (GsdPointingDeviceManager *manager)
{
    Display *display;
    XEventClass class_presence;
    gint xi_presence;

    gint op_code, event, error;

    if (!XQueryExtension(GDK_DISPLAY(),
                         "XInputExtension",
                         &op_code,
                         &event,
                         &error)) {
        return;
    }

    display = gdk_x11_get_default_xdisplay();

    gdk_error_trap_push();
    DevicePresence(display, xi_presence, class_presence);
    XSelectExtensionEvent(display,
                          RootWindow(display, DefaultScreen(display)),
                          &class_presence, 1);
    gdk_flush();
    if (!gdk_error_trap_pop())
        gdk_window_add_filter(NULL, device_presence_filter, manager);
}
コード例 #2
0
static GdkFilterReturn
device_presence_filter (GdkXEvent *xevent,
                        GdkEvent  *event,
                        gpointer   data)
{
    XEvent *xev = (XEvent *)xevent;
    XEventClass class_presence;
    int xi_presence;
    GpdsXInput *xinput;
    GsdPointingDeviceManager *manager = GSD_POINTING_DEVICE_MANAGER(data);

    xinput = gsd_pointing_device_manager_get_xinput(manager);
    if (!xinput)
        return GDK_FILTER_CONTINUE;

    DevicePresence(gdk_x11_get_default_xdisplay(), xi_presence, class_presence);

    if (xev->type == xi_presence) {
        XDevicePresenceNotifyEvent *notify_event = (XDevicePresenceNotifyEvent *)xev;
        if (notify_event->devchange == DeviceEnabled ||
            notify_event->devchange == DeviceRemoved) {
            set_disable_while_other_device_exists(manager,
                                                  xinput,
                                                  gconf_client_get_default());
        }
    }
    g_object_unref(xinput);

    return GDK_FILTER_CONTINUE;
}
コード例 #3
0
ファイル: xinput_helper.cpp プロジェクト: KDE/kde-workspace
int XInputEventNotifier::registerForNewDeviceEvent(Display* display)
{
	int xitype;
	XEventClass xiclass;

	DevicePresence(display, xitype, xiclass);
	XSelectExtensionEvent(display, DefaultRootWindow(display), &xiclass, 1);
	kDebug() << "Registered for new device events from XInput, class" << xitype;
	xinputEventType = xitype;
	return xitype;
}