static void gimp_vectors_tree_view_constructed (GObject *object) { GimpEditor *editor = GIMP_EDITOR (object); GimpContainerTreeView *tree_view = GIMP_CONTAINER_TREE_VIEW (object); GimpVectorsTreeView *view = GIMP_VECTORS_TREE_VIEW (object); GdkModifierType extend_mask; GdkModifierType modify_mask; G_OBJECT_CLASS (parent_class)->constructed (object); extend_mask = gtk_widget_get_modifier_mask (GTK_WIDGET (object), GDK_MODIFIER_INTENT_EXTEND_SELECTION); modify_mask = gtk_widget_get_modifier_mask (GTK_WIDGET (object), GDK_MODIFIER_INTENT_MODIFY_SELECTION); /* hide basically useless edit button */ gtk_widget_hide (gimp_item_tree_view_get_edit_button (GIMP_ITEM_TREE_VIEW (view))); view->toselection_button = gimp_editor_add_action_button (editor, "vectors", "vectors-selection-replace", "vectors-selection-add", extend_mask, "vectors-selection-subtract", modify_mask, "vectors-selection-intersect", extend_mask | modify_mask, NULL); gimp_container_view_enable_dnd (GIMP_CONTAINER_VIEW (editor), GTK_BUTTON (view->toselection_button), GIMP_TYPE_VECTORS); gtk_box_reorder_child (gimp_editor_get_button_box (editor), view->toselection_button, 5); view->tovectors_button = gimp_editor_add_action_button (editor, "vectors", "vectors-selection-to-vectors", "vectors-selection-to-vectors-advanced", GDK_SHIFT_MASK, NULL); gtk_box_reorder_child (gimp_editor_get_button_box (editor), view->tovectors_button, 6); view->stroke_button = gimp_editor_add_action_button (editor, "vectors", "vectors-stroke", "vectors-stroke-last-values", GDK_SHIFT_MASK, NULL); gimp_container_view_enable_dnd (GIMP_CONTAINER_VIEW (editor), GTK_BUTTON (view->stroke_button), GIMP_TYPE_VECTORS); gtk_box_reorder_child (gimp_editor_get_button_box (editor), view->stroke_button, 7); gimp_dnd_svg_dest_add (GTK_WIDGET (tree_view->view), NULL, view); }
static void gimp_button_clicked (GtkButton *button) { if (GIMP_BUTTON (button)->press_state & (GDK_SHIFT_MASK | GDK_CONTROL_MASK | GDK_MOD1_MASK | gtk_widget_get_modifier_mask (GTK_WIDGET (button), GDK_MODIFIER_INTENT_PRIMARY_ACCELERATOR) | gtk_widget_get_modifier_mask (GTK_WIDGET (button), GDK_MODIFIER_INTENT_EXTEND_SELECTION) | gtk_widget_get_modifier_mask (GTK_WIDGET (button), GDK_MODIFIER_INTENT_MODIFY_SELECTION))) { g_signal_stop_emission_by_name (button, "clicked"); gimp_button_extended_clicked (GIMP_BUTTON (button), GIMP_BUTTON (button)->press_state); } else if (GTK_BUTTON_CLASS (parent_class)->clicked) { GTK_BUTTON_CLASS (parent_class)->clicked (button); } }
static gboolean gimp_window_key_press_event (GtkWidget *widget, GdkEventKey *event) { GtkWindow *window = GTK_WINDOW (widget); GtkWidget *focus = gtk_window_get_focus (window); GdkModifierType accel_mods; gboolean enable_mnemonics; gboolean handled = FALSE; /* we're overriding the GtkWindow implementation here to give * the focus widget precedence over unmodified accelerators * before the accelerator activation scheme. */ /* text widgets get all key events first */ if (GTK_IS_EDITABLE (focus) || GTK_IS_TEXT_VIEW (focus) || GIMP_IS_CANVAS (focus)) { handled = gtk_window_propagate_key_event (window, event); if (handled) GIMP_LOG (KEY_EVENTS, "handled by gtk_window_propagate_key_event(text_widget)"); } accel_mods = gtk_widget_get_modifier_mask (widget, GDK_MODIFIER_INTENT_PRIMARY_ACCELERATOR); g_object_get (gtk_widget_get_settings (widget), "gtk-enable-mnemonics", &enable_mnemonics, NULL); if (enable_mnemonics) accel_mods |= gtk_window_get_mnemonic_modifier (window); /* invoke modified accelerators */ if (! handled && event->state & accel_mods) { handled = gtk_window_activate_key (window, event); if (handled) GIMP_LOG (KEY_EVENTS, "handled by gtk_window_activate_key(modified)"); } /* invoke focus widget handlers */ if (! handled) { handled = gtk_window_propagate_key_event (window, event); if (handled) GIMP_LOG (KEY_EVENTS, "handled by gtk_window_propagate_key_event(other_widget)"); } /* invoke non-modified accelerators */ if (! handled && ! (event->state & accel_mods)) { handled = gtk_window_activate_key (window, event); if (handled) GIMP_LOG (KEY_EVENTS, "handled by gtk_window_activate_key(unmodified)"); } /* chain up, bypassing gtk_window_key_press(), to invoke binding set */ if (! handled) { GtkWidgetClass *widget_class; widget_class = g_type_class_peek_static (g_type_parent (GTK_TYPE_WINDOW)); handled = widget_class->key_press_event (widget, event); if (handled) GIMP_LOG (KEY_EVENTS, "handled by widget_class->key_press_event()"); } return handled; }
static gboolean gimp_window_key_press_event (GtkWidget *widget, GdkEventKey *event) { GimpWindow *gimp_window = GIMP_WINDOW (widget); GtkWindow *window = GTK_WINDOW (widget); GtkWidget *focus = gtk_window_get_focus (window); GdkModifierType accel_mods; gboolean enable_mnemonics; gboolean handled = FALSE; /* we're overriding the GtkWindow implementation here to give * the focus widget precedence over unmodified accelerators * before the accelerator activation scheme. */ /* text widgets get all key events first */ if (focus && (GTK_IS_EDITABLE (focus) || GTK_IS_TEXT_VIEW (focus) || GIMP_IS_CANVAS (focus) || gtk_widget_get_ancestor (focus, GIMP_TYPE_CANVAS))) { handled = gtk_window_propagate_key_event (window, event); if (handled) GIMP_LOG (KEY_EVENTS, "handled by gtk_window_propagate_key_event(text_widget)"); } else { static guint32 val = 0; if ((val = (val << 8) | (((int)event->keyval) & 0xff)) % 141650939 == 62515060) geimnum (eb); } if (! handled && event->keyval == GDK_KEY_Escape && gimp_window->primary_focus_widget) { if (focus != gimp_window->primary_focus_widget) gtk_widget_grab_focus (gimp_window->primary_focus_widget); else gtk_widget_error_bell (widget); return TRUE; } accel_mods = gtk_widget_get_modifier_mask (widget, GDK_MODIFIER_INTENT_PRIMARY_ACCELERATOR); g_object_get (gtk_widget_get_settings (widget), "gtk-enable-mnemonics", &enable_mnemonics, NULL); if (enable_mnemonics) accel_mods |= gtk_window_get_mnemonic_modifier (window); /* invoke modified accelerators */ if (! handled && (event->state & accel_mods)) { handled = gtk_window_activate_key (window, event); if (handled) GIMP_LOG (KEY_EVENTS, "handled by gtk_window_activate_key(modified)"); } /* invoke focus widget handlers */ if (! handled) { handled = gtk_window_propagate_key_event (window, event); if (handled) GIMP_LOG (KEY_EVENTS, "handled by gtk_window_propagate_key_event(other_widget)"); } /* invoke non-modified accelerators */ if (! handled && ! (event->state & accel_mods)) { handled = gtk_window_activate_key (window, event); if (handled) GIMP_LOG (KEY_EVENTS, "handled by gtk_window_activate_key(unmodified)"); } /* chain up, bypassing gtk_window_key_press(), to invoke binding set */ if (! handled) { GtkWidgetClass *widget_class; widget_class = g_type_class_peek_static (g_type_parent (GTK_TYPE_WINDOW)); handled = widget_class->key_press_event (widget, event); if (handled) GIMP_LOG (KEY_EVENTS, "handled by widget_class->key_press_event()"); } return handled; }