gboolean gimp_display_shell_quick_mask_button_press (GtkWidget *widget, GdkEventButton *bevent, GimpDisplayShell *shell) { if (! gimp_display_get_image (shell->display)) return TRUE; if (gdk_event_triggers_context_menu ((GdkEvent *) bevent)) { GimpImageWindow *window = gimp_display_shell_get_window (shell); if (window) { GimpUIManager *manager = gimp_image_window_get_ui_manager (window); gimp_ui_manager_ui_popup (manager, "/quick-mask-popup", GTK_WIDGET (shell), NULL, NULL, NULL, NULL); } return TRUE; } return FALSE; }
void view_dot_for_dot_cmd_callback (GtkAction *action, gpointer data) { GimpDisplay *display; GimpDisplayShell *shell; gboolean active; return_if_no_display (display, data); shell = gimp_display_get_shell (display); active = gtk_toggle_action_get_active (GTK_TOGGLE_ACTION (action)); if (active != shell->dot_for_dot) { GimpImageWindow *window = gimp_display_shell_get_window (shell); gimp_display_shell_scale_set_dot_for_dot (shell, active); if (window) SET_ACTIVE (gimp_image_window_get_ui_manager (window), "view-dot-for-dot", shell->dot_for_dot); if (IS_ACTIVE_DISPLAY (display)) SET_ACTIVE (shell->popup_manager, "view-dot-for-dot", shell->dot_for_dot); } }
static void gimp_display_shell_close_response (GtkWidget *widget, gint response_id, GimpDisplayShell *shell) { gtk_widget_destroy (widget); switch (response_id) { case GTK_RESPONSE_CLOSE: gimp_display_close (shell->display); break; case RESPONSE_SAVE: { GimpImageWindow *window = gimp_display_shell_get_window (shell); if (window) { GimpUIManager *manager = gimp_image_window_get_ui_manager (window); /* FIXME image window: set this display active */ gimp_ui_manager_activate_action (manager, "file", "file-save-and-close"); } } break; default: break; } }
void gimp_display_shell_close (GimpDisplayShell *shell, gboolean kill_it) { GimpImage *image; g_return_if_fail (GIMP_IS_DISPLAY_SHELL (shell)); image = gimp_display_get_image (shell->display); /* FIXME: gimp_busy HACK not really appropriate here because we only * want to prevent the busy image and display to be closed. --Mitch */ if (shell->display->gimp->busy) return; /* If the image has been modified, give the user a chance to save * it before nuking it--this only applies if its the last view * to an image canvas. (a image with disp_count = 1) */ if (! kill_it && image && gimp_image_get_display_count (image) == 1 && gimp_image_is_dirty (image) && shell->display->config->confirm_on_close) { /* If there's a save dialog active for this image, then raise it. * (see bug #511965) */ GtkWidget *dialog = g_object_get_data (G_OBJECT (image), "gimp-file-save-dialog"); if (dialog) { gtk_window_present (GTK_WINDOW (dialog)); } else { gimp_display_shell_close_dialog (shell, image); } } else if (image) { gimp_display_close (shell->display); } else { GimpImageWindow *window = gimp_display_shell_get_window (shell); if (window) { GimpUIManager *manager = gimp_image_window_get_ui_manager (window); /* Activate the action instead of simply calling gimp_exit(), so * the quit action's sensitivity is taken into account. */ gimp_ui_manager_activate_action (manager, "file", "file-quit"); } } }
void gimp_display_shell_quick_mask_toggled (GtkWidget *widget, GimpDisplayShell *shell) { GimpImage *image = gimp_display_get_image (shell->display); gboolean active = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (widget)); if (active != gimp_image_get_quick_mask_state (image)) { GimpImageWindow *window = gimp_display_shell_get_window (shell); if (window) { GimpUIManager *manager = gimp_image_window_get_ui_manager (window); gimp_ui_manager_toggle_action (manager, "quick-mask", "quick-mask-toggle", active); } } }
void gimp_display_shell_set_action_active (GimpDisplayShell *shell, const gchar *action, gboolean active) { GimpImageWindow *window; GimpContext *context; g_return_if_fail (GIMP_IS_DISPLAY_SHELL (shell)); g_return_if_fail (action != NULL); window = gimp_display_shell_get_window (shell); if (window && gimp_image_window_get_active_shell (window) == shell) { GimpUIManager *manager = gimp_image_window_get_ui_manager (window); GimpActionGroup *action_group; action_group = gimp_ui_manager_get_action_group (manager, "view"); if (action_group) gimp_action_group_set_action_active (action_group, action, active); } context = gimp_get_user_context (shell->display->gimp); if (shell->display == gimp_context_get_display (context)) { GimpActionGroup *action_group; action_group = gimp_ui_manager_get_action_group (shell->popup_manager, "view"); if (action_group) gimp_action_group_set_action_active (action_group, action, active); } }
void debug_dump_keyboard_shortcuts_cmd_callback (GtkAction *action, gpointer data) { GimpDisplay *display; GimpImageWindow *window; GtkUIManager *manager; GtkAccelGroup *accel_group; GList *group_it; GList *strings = NULL; return_if_no_display (display, data); window = gimp_display_shell_get_window (gimp_display_get_shell (display)); manager = GTK_UI_MANAGER (gimp_image_window_get_ui_manager (window)); accel_group = gtk_ui_manager_get_accel_group (manager); /* Gather formated strings of keyboard shortcuts */ for (group_it = gtk_ui_manager_get_action_groups (manager); group_it; group_it = g_list_next (group_it)) { GimpActionGroup *group = group_it->data; GList *actions = NULL; GList *action_it = NULL; actions = gtk_action_group_list_actions (GTK_ACTION_GROUP (group)); actions = g_list_sort (actions, (GCompareFunc) gimp_action_name_compare); for (action_it = actions; action_it; action_it = g_list_next (action_it)) { GtkAction *action = action_it->data; const gchar *name = gtk_action_get_name (action); GClosure *accel_closure = NULL; if (strstr (name, "-menu") || strstr (name, "-popup") || name[0] == '<') continue; accel_closure = gtk_action_get_accel_closure (action); if (accel_closure) { GtkAccelKey *key = gtk_accel_group_find (accel_group, debug_accel_find_func, accel_closure); if (key && key->accel_key && key->accel_flags & GTK_ACCEL_VISIBLE) { const gchar *label_tmp; gchar *label; gchar *key_string; label_tmp = gtk_action_get_label (action); label = gimp_strip_uline (label_tmp); key_string = gtk_accelerator_get_label (key->accel_key, key->accel_mods); strings = g_list_prepend (strings, g_strdup_printf ("%-20s %s", key_string, label)); g_free (key_string); g_free (label); } } } g_list_free (actions); } /* Sort and prints the strings */ { GList *string_it = NULL; strings = g_list_sort (strings, (GCompareFunc) strcmp); for (string_it = strings; string_it; string_it = g_list_next (string_it)) { g_print ("%s\n", (gchar *) string_it->data); g_free (string_it->data); } g_list_free (strings); } }
static GtkWidget * gimp_single_window_strategy_show_dockable_dialog (GimpWindowStrategy *strategy, Gimp *gimp, GimpDialogFactory *factory, GdkMonitor *monitor, const gchar *identifiers) { GList *windows = gimp_get_image_windows (gimp); GtkWidget *widget = NULL; GimpImageWindow *window; g_return_val_if_fail (windows != NULL, NULL); /* In single-window mode, there should only be one window... */ window = GIMP_IMAGE_WINDOW (windows->data); if (strcmp ("gimp-toolbox", identifiers) == 0) { /* Only allow one toolbox... */ if (! gimp_image_window_has_toolbox (window)) { GimpDockColumns *columns; GimpUIManager *ui_manager = gimp_image_window_get_ui_manager (window); widget = gimp_dialog_factory_dialog_new (factory, monitor, ui_manager, GTK_WIDGET (window), "gimp-toolbox", -1 /*view_size*/, FALSE /*present*/); gtk_widget_show (widget); columns = gimp_image_window_get_left_docks (window); gimp_dock_columns_add_dock (columns, GIMP_DOCK (widget), -1 /*index*/); } } else if (gimp_dialog_factory_find_widget (factory, identifiers)) { /* if the dialog is already open, simply raise it */ return gimp_dialog_factory_dialog_raise (factory, monitor, GTK_WIDGET (window), identifiers, -1); } else { GtkWidget *dockbook; dockbook = gimp_image_window_get_default_dockbook (window); if (! dockbook) { GimpDockColumns *dock_columns; /* No dock, need to add one */ dock_columns = gimp_image_window_get_right_docks (window); gimp_dock_columns_prepare_dockbook (dock_columns, -1 /*index*/, &dockbook); } widget = gimp_dockbook_add_from_dialog_factory (GIMP_DOCKBOOK (dockbook), identifiers); } g_list_free (windows); return widget; }