示例#1
0
gint
gimp_device_info_compare (GimpDeviceInfo *a,
                          GimpDeviceInfo *b)
{
  if (a->device && a->display &&
      a->device == gdk_display_get_core_pointer (a->display))
    {
      return -1;
    }
  else if (b->device && b->display &&
           b->device == gdk_display_get_core_pointer (b->display))
    {
      return 1;
    }
  else if (a->device && ! b->device)
    {
      return -1;
    }
  else if (! a->device && b->device)
    {
      return 1;
    }
  else
    {
      return gimp_object_name_collate ((GimpObject *) a,
                                       (GimpObject *) b);
    }
}
gboolean
gimp_display_shell_pointer_grab (GimpDisplayShell *shell,
                                 const GdkEvent   *event,
                                 GdkEventMask      event_mask)
{
  GdkGrabStatus status;

  g_return_val_if_fail (GIMP_IS_DISPLAY_SHELL (shell), FALSE);
  g_return_val_if_fail (event != NULL, FALSE);
  g_return_val_if_fail (shell->pointer_grabbed == FALSE, FALSE);

  status = gdk_pointer_grab (gtk_widget_get_window (shell->canvas),
                             FALSE, event_mask, NULL, NULL,
                             gdk_event_get_time (event));

  if (status == GDK_GRAB_SUCCESS)
    {
      shell->pointer_grabbed = TRUE;

      return TRUE;
    }
  else if (status == GDK_GRAB_ALREADY_GRABBED)
    {
      GimpDeviceManager *manager;
      GdkDisplay        *gdk_display;

      manager = gimp_devices_get_manager (shell->display->gimp);
      gdk_display = gtk_widget_get_display (GTK_WIDGET (shell));

      /*  EEK: trying to grab an extended device always returns
       *  ALREADY_GRABBED, so simply assume the grab succeeded anyway
       */
      if (gimp_device_manager_get_current_device (manager)->device !=
          gdk_display_get_core_pointer (gdk_display))
        {
          shell->pointer_grabbed = TRUE;

          return TRUE;
        }
    }

  g_printerr ("%s: gdk_pointer_grab failed with status %d\n",
              G_STRFUNC, status);

  return FALSE;
}
示例#3
0
static VALUE
rg_core_pointer(VALUE self)
{
    return GOBJ2RVAL(gdk_display_get_core_pointer(_SELF(self)));
}