static void gimp_pick_button_clicked (GtkButton *button) { #ifdef GDK_WINDOWING_QUARTZ _gimp_pick_button_quartz_pick (GIMP_PICK_BUTTON (button)); #else if (_gimp_pick_button_kwin_available ()) _gimp_pick_button_kwin_pick (GIMP_PICK_BUTTON (button)); else _gimp_pick_button_default_pick (GIMP_PICK_BUTTON (button)); #endif }
static void gimp_pick_button_clicked (GtkButton *gtk_button) { GimpPickButton *button = GIMP_PICK_BUTTON (gtk_button); GtkWidget *widget; guint32 timestamp; if (! button->cursor) button->cursor = make_cursor (gtk_widget_get_display (GTK_WIDGET (gtk_button))); if (! button->grab_widget) { button->grab_widget = gtk_invisible_new (); gtk_widget_add_events (button->grab_widget, GDK_BUTTON_RELEASE_MASK | GDK_BUTTON_PRESS_MASK | GDK_POINTER_MOTION_MASK); gtk_widget_show (button->grab_widget); } widget = button->grab_widget; timestamp = gtk_get_current_event_time (); if (gdk_keyboard_grab (gtk_widget_get_window (widget), FALSE, timestamp) != GDK_GRAB_SUCCESS) { g_warning ("Failed to grab keyboard to do eyedropper"); return; } if (gdk_pointer_grab (gtk_widget_get_window (widget), FALSE, GDK_BUTTON_RELEASE_MASK | GDK_BUTTON_PRESS_MASK | GDK_POINTER_MOTION_MASK, NULL, button->cursor, timestamp) != GDK_GRAB_SUCCESS) { gdk_display_keyboard_ungrab (gtk_widget_get_display (widget), timestamp); g_warning ("Failed to grab pointer to do eyedropper"); return; } gtk_grab_add (widget); g_signal_connect (widget, "button-press-event", G_CALLBACK (gimp_pick_button_mouse_press), button); g_signal_connect (widget, "key-press-event", G_CALLBACK (gimp_pick_button_key_press), button); }
static void gimp_pick_button_dispose (GObject *object) { GimpPickButton *button = GIMP_PICK_BUTTON (object); if (button->cursor) { gdk_cursor_unref (button->cursor); button->cursor = NULL; } if (button->grab_widget) { gtk_widget_destroy (button->grab_widget); button->grab_widget = NULL; } G_OBJECT_CLASS (parent_class)->dispose (object); }