/** * gimp_session_info_is_for_dock_window: * @info: * * Helper function to determine if the session info is for a dock. It * uses the dialog factory entry state and the associated widget state * if any to determine that. * * Returns: %TRUE if session info is for a dock, %FALSE otherwise. **/ static gboolean gimp_session_info_is_for_dock_window (GimpSessionInfo *info) { gboolean entry_state_for_dock = info->p->factory_entry == NULL; gboolean widget_state_for_dock = (info->p->widget == NULL || GIMP_IS_DOCK_WINDOW (info->p->widget)); return entry_state_for_dock && widget_state_for_dock; }
static GimpDockWindow * dock_commands_get_dock_window_from_widget (GtkWidget *widget) { GtkWidget *toplevel = gtk_widget_get_toplevel (widget); GimpDockWindow *dock_window = NULL; if (GIMP_IS_DOCK_WINDOW (toplevel)) dock_window = GIMP_DOCK_WINDOW (toplevel); return dock_window; }
void dock_actions_update (GimpActionGroup *group, gpointer data) { GtkWidget *widget = action_data_get_widget (data); GtkWidget *toplevel = NULL; if (widget) toplevel = gtk_widget_get_toplevel (widget); #define SET_ACTIVE(action,active) \ gimp_action_group_set_action_active (group, action, (active) != 0) #define SET_VISIBLE(action,active) \ gimp_action_group_set_action_visible (group, action, (active) != 0) if (GIMP_IS_DOCK_WINDOW (toplevel)) { GimpDockWindow *dock_window = GIMP_DOCK_WINDOW (toplevel); gboolean show_image_menu = ! gimp_dock_window_has_toolbox (dock_window); if (show_image_menu) { SET_VISIBLE ("dock-show-image-menu", TRUE); SET_VISIBLE ("dock-auto-follow-active", TRUE); SET_ACTIVE ("dock-show-image-menu", gimp_dock_window_get_show_image_menu (dock_window)); SET_ACTIVE ("dock-auto-follow-active", gimp_dock_window_get_auto_follow_active (dock_window)); } else { SET_VISIBLE ("dock-show-image-menu", FALSE); SET_VISIBLE ("dock-auto-follow-active", FALSE); } /* update the window actions only in the context of their * own window (not in the context of some display or NULL) * (see view-actions.c) */ window_actions_update (group, toplevel); } else if (GIMP_IS_IMAGE_WINDOW (toplevel)) { SET_VISIBLE ("dock-show-image-menu", FALSE); SET_VISIBLE ("dock-auto-follow-active", FALSE); } #undef SET_ACTIVE #undef SET_VISIBLE }
GtkWidget * dialogs_get_toolbox (void) { GList *list; g_return_val_if_fail (GIMP_IS_DIALOG_FACTORY (gimp_dialog_factory_get_singleton ()), NULL); for (list = gimp_dialog_factory_get_open_dialogs (gimp_dialog_factory_get_singleton ()); list; list = g_list_next (list)) { if (GIMP_IS_DOCK_WINDOW (list->data) && gimp_dock_window_has_toolbox (list->data)) return list->data; } return NULL; }
GimpContext * action_data_get_context (gpointer data) { GimpContext *result = NULL; static gboolean recursion = FALSE; if (! data || recursion) return NULL; recursion = TRUE; if (GIMP_IS_DOCK (data)) result = gimp_dock_get_context ((GimpDock *) data); else if (GIMP_IS_DOCK_WINDOW (data)) result = gimp_dock_window_get_context (((GimpDockWindow *) data)); else if (GIMP_IS_CONTAINER_VIEW (data)) result = gimp_container_view_get_context ((GimpContainerView *) data); else if (GIMP_IS_CONTAINER_EDITOR (data)) result = gimp_container_view_get_context (((GimpContainerEditor *) data)->view); else if (GIMP_IS_IMAGE_EDITOR (data)) result = ((GimpImageEditor *) data)->context; else if (GIMP_IS_NAVIGATION_EDITOR (data)) result = ((GimpNavigationEditor *) data)->context; if (! result) { Gimp *gimp = action_data_get_gimp (data); if (gimp) result = gimp_get_user_context (gimp); } recursion = FALSE; return result; }
void windows_menu_setup (GimpUIManager *manager, const gchar *ui_path) { GList *list; g_return_if_fail (GIMP_IS_UI_MANAGER (manager)); g_return_if_fail (ui_path != NULL); g_object_set_data (G_OBJECT (manager), "image-menu-ui-path", (gpointer) ui_path); g_signal_connect_object (manager->gimp->displays, "add", G_CALLBACK (windows_menu_display_add), manager, 0); g_signal_connect_object (manager->gimp->displays, "remove", G_CALLBACK (windows_menu_display_remove), manager, 0); g_signal_connect_object (manager->gimp->displays, "reorder", G_CALLBACK (windows_menu_display_reorder), manager, 0); for (list = gimp_get_display_iter (manager->gimp); list; list = g_list_next (list)) { GimpDisplay *display = list->data; windows_menu_display_add (manager->gimp->displays, display, manager); } g_signal_connect_object (gimp_dialog_factory_get_singleton (), "dock-window-added", G_CALLBACK (windows_menu_dock_window_added), manager, 0); g_signal_connect_object (gimp_dialog_factory_get_singleton (), "dock-window-removed", G_CALLBACK (windows_menu_dock_window_removed), manager, 0); for (list = gimp_dialog_factory_get_open_dialogs (gimp_dialog_factory_get_singleton ()); list; list = g_list_next (list)) { GimpDockWindow *dock_window = list->data; if (GIMP_IS_DOCK_WINDOW (dock_window)) windows_menu_dock_window_added (gimp_dialog_factory_get_singleton (), dock_window, manager); } g_signal_connect_object (global_recent_docks, "add", G_CALLBACK (windows_menu_recent_add), manager, 0); g_signal_connect_object (global_recent_docks, "remove", G_CALLBACK (windows_menu_recent_remove), manager, 0); for (list = g_list_last (GIMP_LIST (global_recent_docks)->queue->head); list; list = g_list_previous (list)) { GimpSessionInfo *info = list->data; windows_menu_recent_add (global_recent_docks, info, manager); } }
void windows_actions_setup (GimpActionGroup *group) { GList *list; gimp_action_group_add_actions (group, "windows-action", windows_actions, G_N_ELEMENTS (windows_actions)); gimp_action_group_add_toggle_actions (group, "windows-action", windows_toggle_actions, G_N_ELEMENTS (windows_toggle_actions)); gimp_action_group_set_action_hide_empty (group, "windows-docks-menu", FALSE); g_signal_connect_object (group->gimp->displays, "add", G_CALLBACK (windows_actions_display_add), group, 0); g_signal_connect_object (group->gimp->displays, "remove", G_CALLBACK (windows_actions_display_remove), group, 0); for (list = gimp_get_display_iter (group->gimp); list; list = g_list_next (list)) { GimpDisplay *display = list->data; windows_actions_display_add (group->gimp->displays, display, group); } g_signal_connect_object (gimp_dialog_factory_get_singleton (), "dock-window-added", G_CALLBACK (windows_actions_dock_window_added), group, 0); g_signal_connect_object (gimp_dialog_factory_get_singleton (), "dock-window-removed", G_CALLBACK (windows_actions_dock_window_removed), group, 0); for (list = gimp_dialog_factory_get_open_dialogs (gimp_dialog_factory_get_singleton ()); list; list = g_list_next (list)) { GimpDockWindow *dock_window = list->data; if (GIMP_IS_DOCK_WINDOW (dock_window)) windows_actions_dock_window_added (gimp_dialog_factory_get_singleton (), dock_window, group); } g_signal_connect_object (global_recent_docks, "add", G_CALLBACK (windows_actions_recent_add), group, 0); g_signal_connect_object (global_recent_docks, "remove", G_CALLBACK (windows_actions_recent_remove), group, 0); for (list = GIMP_LIST (global_recent_docks)->list; list; list = g_list_next (list)) { GimpSessionInfo *info = list->data; windows_actions_recent_add (global_recent_docks, info, group); } g_signal_connect_object (group->gimp->config, "notify::single-window-mode", G_CALLBACK (windows_actions_single_window_mode_notify), group, 0); }