示例#1
0
文件: device.c 项目: iglosiggio/xfwm4
XfwmDevices *
xfwm_devices_new (GdkDisplay *display)
{
    XfwmDevices *devices;
#ifdef HAVE_XI2
    GdkSeat *seat;
    GdkDevice *pointer_device;
    GdkDevice *keyboard_device;
    gint firstevent, firsterror;
#endif

    devices = g_new0 (XfwmDevices, 1);
    devices->xi2_available = FALSE;
    devices->xi2_opcode = 0;

    devices->pointer.keyboard = FALSE;
    devices->pointer.xi2_device = None;

    devices->keyboard.keyboard = TRUE;
    devices->keyboard.xi2_device = None;

#ifdef HAVE_XI2
    seat = gdk_display_get_default_seat (display);
    pointer_device = gdk_seat_get_pointer (seat);
    keyboard_device = gdk_seat_get_keyboard (seat);

    if (GDK_IS_X11_DEVICE_XI2 (pointer_device) || GDK_IS_X11_DEVICE_XI2 (keyboard_device))
    {
        /* GDK uses XI2, let's use it too */

        /* Obtain XI2 opcode */
        if (XQueryExtension (gdk_x11_display_get_xdisplay (display), "XInputExtension",
                             &devices->xi2_opcode, &firstevent, &firsterror))
        {
            devices->xi2_available = TRUE;
            devices->pointer.xi2_device = gdk_x11_device_get_id (pointer_device);
            devices->keyboard.xi2_device = gdk_x11_device_get_id (keyboard_device);
        }
    }
#endif

    return devices;
}
示例#2
0
/**
 * gdk_x11_device_get_id:
 * @device: (type GdkX11DeviceCore): a #GdkDevice
 *
 * Returns the device ID as seen by XInput2.
 *
 * > If gdk_disable_multidevice() has been called, this function
 * > will respectively return 2/3 for the core pointer and keyboard,
 * > (matching the IDs for the Virtual Core Pointer and Keyboard in
 * > XInput 2), but calling this function on any slave devices (i.e.
 * > those managed via XInput 1.x), will return 0.
 *
 * Returns: the XInput2 device ID.
 *
 * Since: 3.2
 **/
gint
gdk_x11_device_get_id (GdkDevice *device)
{
  gint device_id = 0;

  g_return_val_if_fail (GDK_IS_DEVICE (device), 0);

#ifdef XINPUT_2
  if (GDK_IS_X11_DEVICE_XI2 (device))
    device_id = _gdk_x11_device_xi2_get_id (GDK_X11_DEVICE_XI2 (device));
  else
#endif /* XINPUT_2 */
    if (GDK_IS_X11_DEVICE_CORE (device))
      {
        if (gdk_device_get_source (device) == GDK_SOURCE_KEYBOARD)
          device_id = VIRTUAL_CORE_KEYBOARD_ID;
        else
          device_id = VIRTUAL_CORE_POINTER_ID;
      }

  return device_id;
}