void gimp_session_info_get_info (GimpSessionInfo *info) { g_return_if_fail (GIMP_IS_SESSION_INFO (info)); g_return_if_fail (GTK_IS_WIDGET (info->p->widget)); gimp_session_info_read_geometry (info, NULL /*cevent*/); if (GIMP_IS_SESSION_MANAGED (info->p->widget)) info->p->aux_info = gimp_session_managed_get_aux_info (GIMP_SESSION_MANAGED (info->p->widget)); if (GIMP_IS_DOCK_CONTAINER (info->p->widget)) { GimpDockContainer *dock_container = GIMP_DOCK_CONTAINER (info->p->widget); GList *iter = NULL; GList *docks; docks = gimp_dock_container_get_docks (dock_container); for (iter = docks; iter; iter = g_list_next (iter)) { GimpDock *dock = GIMP_DOCK (iter->data); info->p->docks = g_list_append (info->p->docks, gimp_session_info_dock_from_widget (dock)); } g_list_free (docks); } }
static gboolean gimp_session_info_restore_docks (GimpRestoreDocksData *data) { GimpSessionInfo *info = data->info; GimpDialogFactory *factory = data->factory; GdkScreen *screen = data->screen; gint monitor = data->monitor; GtkWidget *dialog = data->dialog; GList *iter; if (GIMP_IS_DOCK_CONTAINER (dialog)) { /* We expect expect there to always be docks. In sessionrc files * from <= 2.6 not all dock window entries had dock entries, but we * take care of that during sessionrc parsing */ for (iter = info->p->docks; iter; iter = g_list_next (iter)) { GimpSessionInfoDock *dock_info = (GimpSessionInfoDock *) iter->data; GtkWidget *dock; dock = GTK_WIDGET (gimp_session_info_dock_restore (dock_info, factory, screen, monitor, GIMP_DOCK_CONTAINER (dialog))); if (dock && dock_info->position != 0) { GtkWidget *parent = gtk_widget_get_parent (dock); if (GTK_IS_PANED (parent)) { GtkPaned *paned = GTK_PANED (parent); if (dock == gtk_paned_get_child2 (paned)) gtk_paned_set_position (paned, dock_info->position); } } } } gimp_session_info_clear_info (info); g_object_unref (dialog); g_object_unref (screen); g_object_unref (factory); g_object_unref (info); g_slice_free (GimpRestoreDocksData, data); return FALSE; }
static GimpAlignmentType gimp_session_info_dock_get_side (GimpDock *dock) { GimpAlignmentType result = -1; GtkWidget *toplevel = gtk_widget_get_toplevel (GTK_WIDGET (dock)); if (GIMP_IS_DOCK_CONTAINER (toplevel)) { GimpDockContainer *container = GIMP_DOCK_CONTAINER (toplevel); result = gimp_dock_container_get_dock_side (container, dock); } return result; }
/** * gimp_dock_with_window_new: * @factory: a #GimpDialogFacotry * @screen: the #GdkScreen the dock window should appear on * @toolbox: if %TRUE; gives a "gimp-toolbox-window" with a * "gimp-toolbox", "gimp-dock-window"+"gimp-dock" * otherwise * * Returns: the newly created #GimpDock with the #GimpDockWindow **/ GtkWidget * gimp_dock_with_window_new (GimpDialogFactory *factory, GdkScreen *screen, gboolean toolbox) { GtkWidget *dock_window; GimpDockContainer *dock_container; GtkWidget *dock; GimpUIManager *ui_manager; g_return_val_if_fail (GIMP_IS_DIALOG_FACTORY (factory), NULL); g_return_val_if_fail (GDK_IS_SCREEN (screen), NULL); /* Create a dock window to put the dock in. We need to create the * dock window before the dock because the dock has a dependency to * the ui manager in the dock window */ dock_window = gimp_dialog_factory_dialog_new (factory, screen, NULL /*ui_manager*/, (toolbox ? "gimp-toolbox-window" : "gimp-dock-window"), -1 /*view_size*/, FALSE /*present*/); dock_container = GIMP_DOCK_CONTAINER (dock_window); ui_manager = gimp_dock_container_get_ui_manager (dock_container); dock = gimp_dialog_factory_dialog_new (factory, screen, ui_manager, (toolbox ? "gimp-toolbox" : "gimp-dock"), -1 /*view_size*/, FALSE /*present*/); if (dock) gimp_dock_window_add_dock (GIMP_DOCK_WINDOW (dock_window), GIMP_DOCK (dock), -1); return dock; }
static void gimp_color_tool_real_picked (GimpColorTool *color_tool, GimpColorPickState pick_state, gdouble x, gdouble y, const Babl *sample_format, gpointer pixel, const GimpRGB *color) { GimpTool *tool = GIMP_TOOL (color_tool); GimpDisplayShell *shell = gimp_display_get_shell (tool->display); GimpImageWindow *image_window; GimpDialogFactory *dialog_factory; GimpContext *context; image_window = gimp_display_shell_get_window (shell); dialog_factory = gimp_dock_container_get_dialog_factory (GIMP_DOCK_CONTAINER (image_window)); /* use this tool's own options here (NOT color_tool->options) */ context = GIMP_CONTEXT (gimp_tool_get_options (tool)); if (color_tool->pick_mode == GIMP_COLOR_PICK_MODE_FOREGROUND || color_tool->pick_mode == GIMP_COLOR_PICK_MODE_BACKGROUND) { GtkWidget *widget; if (babl_format_is_palette (sample_format)) { widget = gimp_dialog_factory_find_widget (dialog_factory, "gimp-indexed-palette"); if (widget) { GtkWidget *editor = gtk_bin_get_child (GTK_BIN (widget)); guchar *index = pixel; gimp_colormap_editor_set_index (GIMP_COLORMAP_EDITOR (editor), *index, NULL); } } widget = gimp_dialog_factory_find_widget (dialog_factory, "gimp-palette-editor"); if (widget) { GtkWidget *editor = gtk_bin_get_child (GTK_BIN (widget)); gint index; index = gimp_palette_editor_get_index (GIMP_PALETTE_EDITOR (editor), color); if (index != -1) gimp_palette_editor_set_index (GIMP_PALETTE_EDITOR (editor), index, NULL); } } switch (color_tool->pick_mode) { case GIMP_COLOR_PICK_MODE_NONE: break; case GIMP_COLOR_PICK_MODE_FOREGROUND: gimp_context_set_foreground (context, color); break; case GIMP_COLOR_PICK_MODE_BACKGROUND: gimp_context_set_background (context, color); break; case GIMP_COLOR_PICK_MODE_PALETTE: { GdkScreen *screen = gtk_widget_get_screen (GTK_WIDGET (shell)); gint monitor = gimp_widget_get_monitor (GTK_WIDGET (shell)); GtkWidget *dockable; dockable = gimp_window_strategy_show_dockable_dialog (GIMP_WINDOW_STRATEGY (gimp_get_window_strategy (tool->display->gimp)), tool->display->gimp, dialog_factory, screen, monitor, "gimp-palette-editor"); if (dockable) { GtkWidget *palette_editor; GimpData *data; /* don't blink like mad when updating */ if (pick_state != GIMP_COLOR_PICK_STATE_START) gimp_dockable_blink_cancel (GIMP_DOCKABLE (dockable)); palette_editor = gtk_bin_get_child (GTK_BIN (dockable)); data = gimp_data_editor_get_data (GIMP_DATA_EDITOR (palette_editor)); if (! data) { data = GIMP_DATA (gimp_context_get_palette (context)); gimp_data_editor_set_data (GIMP_DATA_EDITOR (palette_editor), data); } gimp_palette_editor_pick_color (GIMP_PALETTE_EDITOR (palette_editor), color, pick_state); } } break; } }