1
/* The GIMP -- an image manipulation program
2
* Copyright (C) 1995 Spencer Kimball and Peter Mattis
4
* This program is free software; you can redistribute it and/or modify
5
* it under the terms of the GNU General Public License as published by
6
* the Free Software Foundation; either version 2 of the License, or
7
* (at your option) any later version.
9
* This program is distributed in the hope that it will be useful,
10
* but WITHOUT ANY WARRANTY; without even the implied warranty of
11
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12
* GNU General Public License for more details.
14
* You should have received a copy of the GNU General Public License
15
* along with this program; if not, write to the Free Software
16
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
25
#include "libgimpwidgets/gimpwidgets.h"
27
#include "actions-types.h"
29
#include "widgets/gimpcontainerview.h"
30
#include "widgets/gimpcontainerview-utils.h"
31
#include "widgets/gimpdialogfactory.h"
32
#include "widgets/gimpdockable.h"
33
#include "widgets/gimpdockbook.h"
34
#include "widgets/gimpimagedock.h"
35
#include "widgets/gimpsessioninfo.h"
37
#include "dialogs/dialogs.h"
39
#include "dockable-commands.h"
42
/* local function prototypes */
44
static void dockable_change_screen_confirm_callback (GtkWidget *dialog,
47
static void dockable_change_screen_destroy_callback (GtkWidget *dialog,
51
/* public functions */
54
dockable_add_tab_cmd_callback (GtkAction *action,
58
GimpDockbook *dockbook = GIMP_DOCKBOOK (data);
66
identifier = g_strdup (value);
68
p = strchr (identifier, '|');
74
gimp_dialog_factory_dockable_new (dockbook->dock->dialog_factory,
80
/* Maybe gimp_dialog_factory_dockable_new() returned an already
81
* existing singleton dockable, so check if it already is
82
* attached to a dockbook.
84
if (dockable && ! GIMP_DOCKABLE (dockable)->dockbook)
85
gimp_dockbook_add (dockbook, GIMP_DOCKABLE (dockable), -1);
90
dockable_close_tab_cmd_callback (GtkAction *action,
93
GimpDockbook *dockbook = GIMP_DOCKBOOK (data);
94
GimpDockable *dockable;
97
page_num = gtk_notebook_get_current_page (GTK_NOTEBOOK (dockbook));
99
dockable = (GimpDockable *)
100
gtk_notebook_get_nth_page (GTK_NOTEBOOK (dockbook), page_num);
103
gimp_dockbook_remove (dockbook, dockable);
107
dockable_detach_tab_cmd_callback (GtkAction *action,
110
GimpDockbook *dockbook = GIMP_DOCKBOOK (data);
111
GimpDockable *dockable;
114
page_num = gtk_notebook_get_current_page (GTK_NOTEBOOK (dockbook));
116
dockable = (GimpDockable *)
117
gtk_notebook_get_nth_page (GTK_NOTEBOOK (dockbook), page_num);
120
gimp_dockable_detach (dockable);
124
dockable_toggle_view_cmd_callback (GtkAction *action,
128
GimpDockbook *dockbook = GIMP_DOCKBOOK (data);
129
GimpDockable *dockable;
130
GimpViewType view_type;
133
view_type = (GimpViewType)
134
gtk_radio_action_get_current_value (GTK_RADIO_ACTION (action));
136
page_num = gtk_notebook_get_current_page (GTK_NOTEBOOK (dockbook));
138
dockable = (GimpDockable *)
139
gtk_notebook_get_nth_page (GTK_NOTEBOOK (dockbook), page_num);
143
GimpDialogFactoryEntry *entry;
145
gimp_dialog_factory_from_widget (GTK_WIDGET (dockable), &entry);
150
gchar *substring = NULL;
152
identifier = g_strdup (entry->identifier);
154
substring = strstr (identifier, "grid");
156
if (substring && view_type == GIMP_VIEW_TYPE_GRID)
161
substring = strstr (identifier, "list");
163
if (substring && view_type == GIMP_VIEW_TYPE_LIST)
169
GimpContainerView *old_view;
170
GtkWidget *new_dockable;
171
gint preview_size = -1;
173
if (view_type == GIMP_VIEW_TYPE_LIST)
174
memcpy (substring, "list", 4);
175
else if (view_type == GIMP_VIEW_TYPE_GRID)
176
memcpy (substring, "grid", 4);
178
old_view = gimp_container_view_get_by_dockable (dockable);
181
preview_size = gimp_container_view_get_preview_size (old_view,
185
gimp_dialog_factory_dockable_new (dockbook->dock->dialog_factory,
190
/* Maybe gimp_dialog_factory_dockable_new() returned
191
* an already existing singleton dockable, so check
192
* if it already is attached to a dockbook.
194
if (new_dockable && ! GIMP_DOCKABLE (new_dockable)->dockbook)
196
gimp_dockbook_add (dockbook, GIMP_DOCKABLE (new_dockable),
199
gimp_dockbook_remove (dockbook, dockable);
201
gtk_notebook_set_current_page (GTK_NOTEBOOK (dockbook),
212
dockable_preview_size_cmd_callback (GtkAction *action,
216
GimpDockbook *dockbook = GIMP_DOCKBOOK (data);
217
GimpDockable *dockable;
221
preview_size = gtk_radio_action_get_current_value (GTK_RADIO_ACTION (action));
223
page_num = gtk_notebook_get_current_page (GTK_NOTEBOOK (dockbook));
225
dockable = (GimpDockable *)
226
gtk_notebook_get_nth_page (GTK_NOTEBOOK (dockbook), page_num);
230
GimpContainerView *view = gimp_container_view_get_by_dockable (dockable);
237
old_size = gimp_container_view_get_preview_size (view,
240
if (old_size != preview_size)
241
gimp_container_view_set_preview_size (view, preview_size,
248
dockable_tab_style_cmd_callback (GtkAction *action,
252
GimpDockbook *dockbook = GIMP_DOCKBOOK (data);
253
GimpDockable *dockable;
254
GimpTabStyle tab_style;
257
tab_style = (GimpTabStyle)
258
gtk_radio_action_get_current_value (GTK_RADIO_ACTION (action));
260
page_num = gtk_notebook_get_current_page (GTK_NOTEBOOK (dockbook));
262
dockable = (GimpDockable *)
263
gtk_notebook_get_nth_page (GTK_NOTEBOOK (dockbook), page_num);
265
if (dockable && dockable->tab_style != tab_style)
267
GtkWidget *tab_widget;
269
gimp_dockable_set_tab_style (dockable, tab_style);
271
tab_widget = gimp_dockbook_get_tab_widget (dockbook, dockable);
273
gtk_notebook_set_tab_label (GTK_NOTEBOOK (dockbook),
274
GTK_WIDGET (dockable),
280
dockable_toggle_image_menu_cmd_callback (GtkAction *action,
283
GimpDockbook *dockbook = GIMP_DOCKBOOK (data);
286
active = gtk_toggle_action_get_active (GTK_TOGGLE_ACTION (action));
288
if (GIMP_IS_IMAGE_DOCK (dockbook->dock))
289
gimp_image_dock_set_show_image_menu (GIMP_IMAGE_DOCK (dockbook->dock),
294
dockable_toggle_auto_cmd_callback (GtkAction *action,
297
GimpDockbook *dockbook = GIMP_DOCKBOOK (data);
300
active = gtk_toggle_action_get_active (GTK_TOGGLE_ACTION (action));
302
if (GIMP_IS_IMAGE_DOCK (dockbook->dock))
303
gimp_image_dock_set_auto_follow_active (GIMP_IMAGE_DOCK (dockbook->dock),
308
dockable_change_screen_cmd_callback (GtkAction *action,
311
GimpDockbook *dockbook = GIMP_DOCKBOOK (data);
319
dock = GTK_WIDGET (dockbook->dock);
321
dialog = g_object_get_data (G_OBJECT (dock), "gimp-change-screen-dialog");
325
gtk_window_present (GTK_WINDOW (dialog));
329
screen = gtk_widget_get_screen (dock);
330
display = gtk_widget_get_display (dock);
332
cur_screen = gdk_screen_get_number (screen);
333
num_screens = gdk_display_get_n_screens (display);
335
dialog = gimp_query_int_box ("Move Dock to Screen",
338
"Enter destination screen",
339
cur_screen, 0, num_screens - 1,
340
G_OBJECT (dock), "destroy",
341
dockable_change_screen_confirm_callback,
344
g_object_set_data (G_OBJECT (dock), "gimp-change-screen-dialog", dialog);
346
g_signal_connect (dialog, "destroy",
347
G_CALLBACK (dockable_change_screen_destroy_callback),
350
gtk_widget_show (dialog);
354
/* private functions */
357
dockable_change_screen_confirm_callback (GtkWidget *dialog,
363
screen = gdk_display_get_screen (gtk_widget_get_display (GTK_WIDGET (data)),
367
gtk_window_set_screen (GTK_WINDOW (data), screen);
371
dockable_change_screen_destroy_callback (GtkWidget *dialog,
374
g_object_set_data (G_OBJECT (dock), "gimp-change-screen-dialog", NULL);