view-commands.c 19.6 KB
Newer Older
Michael Natterer's avatar
Michael Natterer committed
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
/* The GIMP -- an image manipulation program
 * Copyright (C) 1995 Spencer Kimball and Peter Mattis
 *
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation; either version 2 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program; if not, write to the Free Software
 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
 */

#include "config.h"

#include <gtk/gtk.h>

#include "libgimpwidgets/gimpwidgets.h"

Michael Natterer's avatar
Michael Natterer committed
25
#include "actions-types.h"
Michael Natterer's avatar
Michael Natterer committed
26

27 28
#include "config/gimpguiconfig.h"

29 30
#include "core/gimp.h"
#include "core/gimpcontext.h"
Michael Natterer's avatar
Michael Natterer committed
31 32
#include "core/gimpimage.h"

33
#include "display/gimpdisplay.h"
34
#include "display/gimpdisplay-foreach.h"
35
#include "display/gimpdisplayoptions.h"
Michael Natterer's avatar
Michael Natterer committed
36
#include "display/gimpdisplayshell.h"
37
#include "display/gimpdisplayshell-appearance.h"
38
#include "display/gimpdisplayshell-close.h"
39
#include "display/gimpdisplayshell-filter-dialog.h"
40
#include "display/gimpdisplayshell-scale.h"
41

42
#include "widgets/gimpactiongroup.h"
43
#include "widgets/gimpcolordialog.h"
44
#include "widgets/gimpdock.h"
45
#include "widgets/gimpdialogfactory.h"
46
#include "widgets/gimpuimanager.h"
47

48
#include "dialogs/dialogs.h"
Michael Natterer's avatar
Michael Natterer committed
49

50
#include "actions.h"
Michael Natterer's avatar
Michael Natterer committed
51 52
#include "view-commands.h"

53
#include "gimp-intl.h"
Michael Natterer's avatar
Michael Natterer committed
54

55 56

#define SET_ACTIVE(manager,action_name,active) \
57
  { GimpActionGroup *group = \
58
      gimp_ui_manager_get_action_group (manager, "view"); \
59 60
    gimp_action_group_set_action_active (group, action_name, active); }

61 62 63 64
#define IS_ACTIVE_DISPLAY(gdisp) \
  ((gdisp) == \
   gimp_context_get_display (gimp_get_user_context ((gdisp)->gimage->gimp)))

Michael Natterer's avatar
Michael Natterer committed
65

66 67
/*  local function prototypes  */

68 69 70 71
static void   view_padding_color_dialog_update (GimpColorDialog      *dialog,
                                                const GimpRGB        *color,
                                                GimpColorDialogState  state,
                                                GimpDisplayShell     *shell);
72 73


74 75
/*  public functions  */

76
void
77 78
view_new_cmd_callback (GtkAction *action,
                       gpointer   data)
79
{
80 81
  GimpDisplay      *gdisp;
  GimpDisplayShell *shell;
82 83
  return_if_no_display (gdisp, data);

84 85 86 87 88
  shell = GIMP_DISPLAY_SHELL (gdisp->shell);

  gimp_create_display (gdisp->gimage->gimp,
                       gdisp->gimage,
                       shell->unit, shell->scale);
89 90 91
}

void
92 93
view_close_cmd_callback (GtkAction *action,
                         gpointer   data)
94 95 96 97 98 99 100
{
  GimpDisplay *gdisp;
  return_if_no_display (gdisp, data);

  gimp_display_shell_close (GIMP_DISPLAY_SHELL (gdisp->shell), FALSE);
}

Michael Natterer's avatar
Michael Natterer committed
101
void
102 103
view_zoom_fit_in_cmd_callback (GtkAction *action,
                               gpointer   data)
Michael Natterer's avatar
Michael Natterer committed
104
{
105
  GimpDisplay *gdisp;
Michael Natterer's avatar
Michael Natterer committed
106
  return_if_no_display (gdisp, data);
Michael Natterer's avatar
Michael Natterer committed
107

108
  gimp_display_shell_scale_fit_in (GIMP_DISPLAY_SHELL (gdisp->shell));
Michael Natterer's avatar
Michael Natterer committed
109 110 111
}

void
112 113
view_zoom_fit_to_cmd_callback (GtkAction *action,
                               gpointer   data)
Michael Natterer's avatar
Michael Natterer committed
114
{
115
  GimpDisplay *gdisp;
Michael Natterer's avatar
Michael Natterer committed
116
  return_if_no_display (gdisp, data);
Michael Natterer's avatar
Michael Natterer committed
117

118
  gimp_display_shell_scale_fit_to (GIMP_DISPLAY_SHELL (gdisp->shell));
Michael Natterer's avatar
Michael Natterer committed
119 120
}

121
void
122 123 124
view_zoom_cmd_callback (GtkAction *action,
                        gint       value,
                        gpointer   data)
125
{
126 127 128
  GimpDisplay      *gdisp;
  GimpDisplayShell *shell;
  gdouble           scale;
129 130
  return_if_no_display (gdisp, data);

131
  shell = GIMP_DISPLAY_SHELL (gdisp->shell);
132

133
  scale = shell->scale;
134

135 136 137
  switch ((GimpActionSelectType) value)
    {
    case GIMP_ACTION_SELECT_FIRST:
138
      gimp_display_shell_scale (shell, GIMP_ZOOM_OUT_MAX, 0.0);
139 140 141
      break;

    case GIMP_ACTION_SELECT_LAST:
142
      gimp_display_shell_scale (shell, GIMP_ZOOM_IN_MAX, 0.0);
143 144 145 146 147 148 149 150 151 152 153
      break;

    case GIMP_ACTION_SELECT_PREVIOUS:
      gimp_display_shell_scale (shell, GIMP_ZOOM_OUT, 0.0);
      break;

    case GIMP_ACTION_SELECT_NEXT:
      gimp_display_shell_scale (shell, GIMP_ZOOM_IN, 0.0);
      break;

    case GIMP_ACTION_SELECT_SKIP_PREVIOUS:
154
      gimp_display_shell_scale (shell, GIMP_ZOOM_OUT_MORE, 0.0);
155 156 157
      break;

    case GIMP_ACTION_SELECT_SKIP_NEXT:
158
      gimp_display_shell_scale (shell, GIMP_ZOOM_IN_MORE, 0.0);
159 160 161 162 163
      break;

    default:
      scale = action_select_value ((GimpActionSelectType) value,
                                   scale,
164
                                   0.0, 512.0,
165 166 167
                                   1.0, 16.0,
                                   FALSE);

168 169 170
      /* min = 1.0 / 256,  max = 256.0                */
      /* scale = min *  (max / min)**(i/n), i = 0..n  */
      scale = pow (65536.0, scale / 512.0) / 256.0;
171 172 173 174

      gimp_display_shell_scale (shell, GIMP_ZOOM_TO, scale);
      break;
    }
175 176
}

Michael Natterer's avatar
Michael Natterer committed
177
void
178 179 180
view_zoom_explicit_cmd_callback (GtkAction *action,
                                 GtkAction *current,
                                 gpointer   data)
Michael Natterer's avatar
Michael Natterer committed
181
{
182 183
  GimpDisplay      *gdisp;
  GimpDisplayShell *shell;
184
  gint              value;
Michael Natterer's avatar
Michael Natterer committed
185
  return_if_no_display (gdisp, data);
Michael Natterer's avatar
Michael Natterer committed
186

187 188
  shell = GIMP_DISPLAY_SHELL (gdisp->shell);

189
  value = gtk_radio_action_get_current_value (GTK_RADIO_ACTION (action));
190

191
  if (value != 0 /* not Other... */)
192 193 194 195
    {
      if (fabs (value - shell->scale) > 0.0001)
        gimp_display_shell_scale (shell, GIMP_ZOOM_TO, (gdouble) value / 10000);
    }
196 197
}

198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217
void
view_zoom_other_cmd_callback (GtkAction *action,
                              gpointer   data)
{
  GimpDisplay      *gdisp;
  GimpDisplayShell *shell;
  return_if_no_display (gdisp, data);

  shell = GIMP_DISPLAY_SHELL (gdisp->shell);

  /* check if we are activated by the user or from
   * view_actions_set_zoom()
   */
  if (gtk_toggle_action_get_active (GTK_TOGGLE_ACTION (action)) &&
      shell->scale != shell->other_scale)
    {
      gimp_display_shell_scale_dialog (shell);
    }
}

Michael Natterer's avatar
Michael Natterer committed
218
void
219
view_dot_for_dot_cmd_callback (GtkAction *action,
220
                               gpointer   data)
Michael Natterer's avatar
Michael Natterer committed
221
{
222 223
  GimpDisplay      *gdisp;
  GimpDisplayShell *shell;
224
  gboolean          active;
Michael Natterer's avatar
Michael Natterer committed
225
  return_if_no_display (gdisp, data);
Michael Natterer's avatar
Michael Natterer committed
226

227 228
  shell = GIMP_DISPLAY_SHELL (gdisp->shell);

229 230 231
  active = gtk_toggle_action_get_active (GTK_TOGGLE_ACTION (action));

  if (active != shell->dot_for_dot)
232
    {
233
      gimp_display_shell_scale_set_dot_for_dot (shell, active);
234

235
      SET_ACTIVE (shell->menubar_manager, "view-dot-for-dot",
236
                  shell->dot_for_dot);
237 238

      if (IS_ACTIVE_DISPLAY (gdisp))
239
        SET_ACTIVE (shell->popup_manager, "view-dot-for-dot",
240
                    shell->dot_for_dot);
241
    }
Michael Natterer's avatar
Michael Natterer committed
242 243
}

244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289
void
view_scroll_horizontal_cmd_callback (GtkAction *action,
                                     gint       value,
                                     gpointer   data)
{
  GimpDisplay      *gdisp;
  GimpDisplayShell *shell;
  gdouble           offset;
  return_if_no_display (gdisp, data);

  shell = GIMP_DISPLAY_SHELL (gdisp->shell);

  offset = action_select_value ((GimpActionSelectType) value,
                                shell->hsbdata->value,
                                shell->hsbdata->lower,
                                shell->hsbdata->upper -
                                shell->hsbdata->page_size,
                                shell->hsbdata->step_increment,
                                shell->hsbdata->page_increment,
                                FALSE);
  gtk_adjustment_set_value (shell->hsbdata, offset);
}

void
view_scroll_vertical_cmd_callback (GtkAction *action,
                                   gint       value,
                                   gpointer   data)
{
  GimpDisplay      *gdisp;
  GimpDisplayShell *shell;
  gdouble           offset;
  return_if_no_display (gdisp, data);

  shell = GIMP_DISPLAY_SHELL (gdisp->shell);

  offset = action_select_value ((GimpActionSelectType) value,
                                shell->vsbdata->value,
                                shell->vsbdata->lower,
                                shell->vsbdata->upper -
                                shell->vsbdata->page_size,
                                shell->vsbdata->step_increment,
                                shell->vsbdata->page_increment,
                                FALSE);
  gtk_adjustment_set_value (shell->vsbdata, offset);
}

Michael Natterer's avatar
Michael Natterer committed
290
void
291
view_navigation_window_cmd_callback (GtkAction *action,
292
                                     gpointer   data)
Michael Natterer's avatar
Michael Natterer committed
293
{
Michael Natterer's avatar
Michael Natterer committed
294 295
  GimpDisplay      *gdisp;
  GimpDisplayShell *shell;
Michael Natterer's avatar
Michael Natterer committed
296
  return_if_no_display (gdisp, data);
Michael Natterer's avatar
Michael Natterer committed
297

Michael Natterer's avatar
Michael Natterer committed
298 299
  shell = GIMP_DISPLAY_SHELL (gdisp->shell);

Michael Natterer's avatar
Michael Natterer committed
300
  gimp_dialog_factory_dialog_raise (global_dock_factory,
301
                                    gtk_widget_get_screen (gdisp->shell),
Michael Natterer's avatar
Michael Natterer committed
302
                                    "gimp-navigation-view", -1);
Michael Natterer's avatar
Michael Natterer committed
303 304
}

305
void
306
view_display_filters_cmd_callback (GtkAction *action,
307 308 309 310 311 312 313 314
                                   gpointer   data)
{
  GimpDisplay      *gdisp;
  GimpDisplayShell *shell;
  return_if_no_display (gdisp, data);

  shell = GIMP_DISPLAY_SHELL (gdisp->shell);

315 316 317 318 319 320 321 322 323 324
  if (! shell->filters_dialog)
    {
      shell->filters_dialog = gimp_display_shell_filter_dialog_new (shell);

      g_signal_connect (shell->filters_dialog, "destroy",
                        G_CALLBACK (gtk_widget_destroyed),
                        &shell->filters_dialog);
    }

  gtk_window_present (GTK_WINDOW (shell->filters_dialog));
325 326
}

Michael Natterer's avatar
Michael Natterer committed
327
void
328
view_toggle_selection_cmd_callback (GtkAction *action,
329
                                    gpointer   data)
Michael Natterer's avatar
Michael Natterer committed
330
{
331 332
  GimpDisplay      *gdisp;
  GimpDisplayShell *shell;
333
  gboolean          active;
Michael Natterer's avatar
Michael Natterer committed
334
  return_if_no_display (gdisp, data);
Michael Natterer's avatar
Michael Natterer committed
335

336 337
  shell = GIMP_DISPLAY_SHELL (gdisp->shell);

338 339 340
  active = gtk_toggle_action_get_active (GTK_TOGGLE_ACTION (action));

  gimp_display_shell_set_show_selection (shell, active);
Michael Natterer's avatar
Michael Natterer committed
341 342 343
}

void
344
view_toggle_layer_boundary_cmd_callback (GtkAction *action,
Michael Natterer's avatar
Michael Natterer committed
345 346 347 348
                                         gpointer   data)
{
  GimpDisplay      *gdisp;
  GimpDisplayShell *shell;
349
  gboolean          active;
Michael Natterer's avatar
Michael Natterer committed
350 351 352 353
  return_if_no_display (gdisp, data);

  shell = GIMP_DISPLAY_SHELL (gdisp->shell);

354 355 356
  active = gtk_toggle_action_get_active (GTK_TOGGLE_ACTION (action));

  gimp_display_shell_set_show_layer (shell, active);
Michael Natterer's avatar
Michael Natterer committed
357 358
}

359
void
360
view_toggle_menubar_cmd_callback (GtkAction *action,
361 362 363 364
                                  gpointer   data)
{
  GimpDisplay      *gdisp;
  GimpDisplayShell *shell;
365
  gboolean          active;
366 367 368 369
  return_if_no_display (gdisp, data);

  shell = GIMP_DISPLAY_SHELL (gdisp->shell);

370 371 372
  active = gtk_toggle_action_get_active (GTK_TOGGLE_ACTION (action));

  gimp_display_shell_set_show_menubar (shell, active);
373 374
}

Michael Natterer's avatar
Michael Natterer committed
375
void
376
view_toggle_rulers_cmd_callback (GtkAction *action,
377
                                 gpointer   data)
Michael Natterer's avatar
Michael Natterer committed
378
{
379 380
  GimpDisplay      *gdisp;
  GimpDisplayShell *shell;
381
  gboolean          active;
Michael Natterer's avatar
Michael Natterer committed
382
  return_if_no_display (gdisp, data);
Michael Natterer's avatar
Michael Natterer committed
383

Michael Natterer's avatar
Michael Natterer committed
384 385
  shell = GIMP_DISPLAY_SHELL (gdisp->shell);

386 387 388
  active = gtk_toggle_action_get_active (GTK_TOGGLE_ACTION (action));

  gimp_display_shell_set_show_rulers (shell, active);
389
}
390

391
void
392
view_toggle_scrollbars_cmd_callback (GtkAction *action,
393 394 395 396
                                     gpointer   data)
{
  GimpDisplay      *gdisp;
  GimpDisplayShell *shell;
397
  gboolean          active;
398
  return_if_no_display (gdisp, data);
399

400 401
  shell = GIMP_DISPLAY_SHELL (gdisp->shell);

402 403 404
  active = gtk_toggle_action_get_active (GTK_TOGGLE_ACTION (action));

  gimp_display_shell_set_show_scrollbars (shell, active);
Michael Natterer's avatar
Michael Natterer committed
405 406 407
}

void
408
view_toggle_statusbar_cmd_callback (GtkAction *action,
409
                                    gpointer   data)
Michael Natterer's avatar
Michael Natterer committed
410
{
Michael Natterer's avatar
Michael Natterer committed
411 412
  GimpDisplay      *gdisp;
  GimpDisplayShell *shell;
413
  gboolean          active;
Michael Natterer's avatar
Michael Natterer committed
414
  return_if_no_display (gdisp, data);
Michael Natterer's avatar
Michael Natterer committed
415

Michael Natterer's avatar
Michael Natterer committed
416 417
  shell = GIMP_DISPLAY_SHELL (gdisp->shell);

418 419 420
  active = gtk_toggle_action_get_active (GTK_TOGGLE_ACTION (action));

  gimp_display_shell_set_show_statusbar (shell, active);
Michael Natterer's avatar
Michael Natterer committed
421 422 423
}

void
424
view_toggle_guides_cmd_callback (GtkAction *action,
425
                                 gpointer   data)
Michael Natterer's avatar
Michael Natterer committed
426
{
427 428
  GimpDisplay      *gdisp;
  GimpDisplayShell *shell;
429
  gboolean          active;
Michael Natterer's avatar
Michael Natterer committed
430
  return_if_no_display (gdisp, data);
Michael Natterer's avatar
Michael Natterer committed
431

432 433
  shell = GIMP_DISPLAY_SHELL (gdisp->shell);

434 435 436
  active = gtk_toggle_action_get_active (GTK_TOGGLE_ACTION (action));

  gimp_display_shell_set_show_guides (shell, active);
Michael Natterer's avatar
Michael Natterer committed
437 438
}

439
void
440 441
view_toggle_grid_cmd_callback (GtkAction *action,
                               gpointer   data)
442 443 444 445 446 447 448 449 450 451
{
  GimpDisplay      *gdisp;
  GimpDisplayShell *shell;
  gboolean          active;
  return_if_no_display (gdisp, data);

  shell = GIMP_DISPLAY_SHELL (gdisp->shell);

  active = gtk_toggle_action_get_active (GTK_TOGGLE_ACTION (action));

452
  gimp_display_shell_set_show_grid (shell, active);
453 454
}

Michael Natterer's avatar
Michael Natterer committed
455
void
456 457
view_toggle_sample_points_cmd_callback (GtkAction *action,
                                        gpointer   data)
Michael Natterer's avatar
Michael Natterer committed
458
{
459 460
  GimpDisplay      *gdisp;
  GimpDisplayShell *shell;
461
  gboolean          active;
Michael Natterer's avatar
Michael Natterer committed
462
  return_if_no_display (gdisp, data);
Michael Natterer's avatar
Michael Natterer committed
463

464
  shell = GIMP_DISPLAY_SHELL (gdisp->shell);
465

466
  active = gtk_toggle_action_get_active (GTK_TOGGLE_ACTION (action));
467

468
  gimp_display_shell_set_show_sample_points (shell, active);
Michael Natterer's avatar
Michael Natterer committed
469 470
}

471
void
472 473
view_snap_to_guides_cmd_callback (GtkAction *action,
                                  gpointer   data)
474 475 476
{
  GimpDisplay      *gdisp;
  GimpDisplayShell *shell;
477
  gboolean          active;
478 479 480 481
  return_if_no_display (gdisp, data);

  shell = GIMP_DISPLAY_SHELL (gdisp->shell);

482
  active = gtk_toggle_action_get_active (GTK_TOGGLE_ACTION (action));
483

484
  gimp_display_shell_set_snap_to_guides (shell, active);
485 486 487
}

void
488
view_snap_to_grid_cmd_callback (GtkAction *action,
489 490 491 492
                                gpointer   data)
{
  GimpDisplay      *gdisp;
  GimpDisplayShell *shell;
493
  gboolean          active;
494 495 496 497
  return_if_no_display (gdisp, data);

  shell = GIMP_DISPLAY_SHELL (gdisp->shell);

498
  active = gtk_toggle_action_get_active (GTK_TOGGLE_ACTION (action));
499

500
  gimp_display_shell_set_snap_to_grid (shell, active);
501 502
}

503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534
void
view_snap_to_canvas_cmd_callback (GtkAction *action,
                                  gpointer   data)
{
  GimpDisplay      *gdisp;
  GimpDisplayShell *shell;
  gboolean          active;
  return_if_no_display (gdisp, data);

  shell = GIMP_DISPLAY_SHELL (gdisp->shell);

  active = gtk_toggle_action_get_active (GTK_TOGGLE_ACTION (action));

  gimp_display_shell_set_snap_to_canvas (shell, active);
}

void
view_snap_to_vectors_cmd_callback (GtkAction *action,
                                   gpointer   data)
{
  GimpDisplay      *gdisp;
  GimpDisplayShell *shell;
  gboolean          active;
  return_if_no_display (gdisp, data);

  shell = GIMP_DISPLAY_SHELL (gdisp->shell);

  active = gtk_toggle_action_get_active (GTK_TOGGLE_ACTION (action));

  gimp_display_shell_set_snap_to_vectors (shell, active);
}

535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559
void
view_padding_color_cmd_callback (GtkAction *action,
                                 gint       value,
                                 gpointer   data)
{
  GimpDisplay        *gdisp;
  GimpDisplayShell   *shell;
  GimpDisplayOptions *options;
  gboolean            fullscreen;
  return_if_no_display (gdisp, data);

  shell = GIMP_DISPLAY_SHELL (gdisp->shell);

  fullscreen = gimp_display_shell_get_fullscreen (shell);

  if (fullscreen)
    options = shell->fullscreen_options;
  else
    options = shell->options;

  switch ((GimpCanvasPaddingMode) value)
    {
    case GIMP_CANVAS_PADDING_MODE_DEFAULT:
    case GIMP_CANVAS_PADDING_MODE_LIGHT_CHECK:
    case GIMP_CANVAS_PADDING_MODE_DARK_CHECK:
560
      g_object_set_data (G_OBJECT (shell), "padding-color-dialog", NULL);
561 562 563 564 565 566 567 568 569

      options->padding_mode_set = TRUE;

      gimp_display_shell_set_padding (shell, (GimpCanvasPaddingMode) value,
                                      &options->padding_color);
      break;

    case GIMP_CANVAS_PADDING_MODE_CUSTOM:
      {
570
        GtkWidget *color_dialog;
571

572
        color_dialog = g_object_get_data (G_OBJECT (shell),
573
                                          "padding-color-dialog");
574

575
        if (! color_dialog)
576
          {
577 578 579 580 581 582 583 584 585 586 587 588 589
            color_dialog = gimp_color_dialog_new (GIMP_VIEWABLE (gdisp->gimage),
                                                  _("Set Canvas Padding Color"),
                                                  GTK_STOCK_SELECT_COLOR,
                                                  _("Set Custom Canvas Padding Color"),
                                                  gdisp->shell,
                                                  NULL, NULL,
                                                  &options->padding_color,
                                                  FALSE, FALSE);

            g_signal_connect (color_dialog, "update",
                              G_CALLBACK (view_padding_color_dialog_update),
                              gdisp->shell);

590 591
            g_object_set_data_full (G_OBJECT (shell), "padding-color-dialog",
                                    color_dialog,
592
                                    (GDestroyNotify) gtk_widget_destroy);
593 594
          }

595
        gtk_window_present (GTK_WINDOW (color_dialog));
596 597 598 599
      }
      break;

    case GIMP_CANVAS_PADDING_MODE_RESET:
600
      g_object_set_data (G_OBJECT (shell), "padding-color-dialog", NULL);
601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622

      {
        GimpDisplayConfig  *config;
        GimpDisplayOptions *default_options;

        config = GIMP_DISPLAY_CONFIG (gdisp->gimage->gimp->config);

        options->padding_mode_set = FALSE;

        if (fullscreen)
          default_options = config->default_fullscreen_view;
        else
          default_options = config->default_view;

        gimp_display_shell_set_padding (shell,
                                        default_options->padding_mode,
                                        &default_options->padding_color);
      }
      break;
    }
}

Michael Natterer's avatar
Michael Natterer committed
623
void
624
view_shrink_wrap_cmd_callback (GtkAction *action,
625
                               gpointer   data)
Michael Natterer's avatar
Michael Natterer committed
626
{
627
  GimpDisplay *gdisp;
Michael Natterer's avatar
Michael Natterer committed
628
  return_if_no_display (gdisp, data);
Michael Natterer's avatar
Michael Natterer committed
629

Michael Natterer's avatar
Michael Natterer committed
630
  gimp_display_shell_scale_shrink_wrap (GIMP_DISPLAY_SHELL (gdisp->shell));
Michael Natterer's avatar
Michael Natterer committed
631
}
632 633

void
634
view_fullscreen_cmd_callback (GtkAction *action,
635
                              gpointer   data)
636 637 638
{
  GimpDisplay      *gdisp;
  GimpDisplayShell *shell;
639
  gboolean          active;
640 641 642 643
  return_if_no_display (gdisp, data);

  shell = GIMP_DISPLAY_SHELL (gdisp->shell);

644 645 646
  active = gtk_toggle_action_get_active (GTK_TOGGLE_ACTION (action));

  gimp_display_shell_set_fullscreen (shell, active);
647 648 649
}

void
650 651 652
view_move_to_screen_cmd_callback (GtkAction *action,
                                  GtkAction *current,
                                  gpointer   data)
653 654
{
  GimpDisplay *gdisp;
655
  gint         value;
656 657
  return_if_no_display (gdisp, data);

658
  value = gtk_radio_action_get_current_value (GTK_RADIO_ACTION (action));
659

660
  if (value != gdk_screen_get_number (gtk_widget_get_screen (gdisp->shell)))
661
    {
662 663
      GdkDisplay *display;
      GdkScreen  *screen;
664

665 666
      display = gtk_widget_get_display (gdisp->shell);
      screen  = gdk_display_get_screen (display, value);
667

668 669 670
      if (screen)
        gtk_window_set_screen (GTK_WINDOW (gdisp->shell), screen);
    }
671
}
672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708


/*  private functions  */

static void
view_padding_color_dialog_update (GimpColorDialog      *dialog,
                                  const GimpRGB        *color,
                                  GimpColorDialogState  state,
                                  GimpDisplayShell     *shell)
{
  GimpDisplayOptions *options;
  gboolean            fullscreen;

  fullscreen = gimp_display_shell_get_fullscreen (shell);

  if (fullscreen)
    options = shell->fullscreen_options;
  else
    options = shell->options;

  switch (state)
    {
    case GIMP_COLOR_DIALOG_OK:
      options->padding_mode_set = TRUE;

      gimp_display_shell_set_padding (shell, GIMP_CANVAS_PADDING_MODE_CUSTOM,
                                      color);
      /* fallthru */

    case GIMP_COLOR_DIALOG_CANCEL:
      g_object_set_data (G_OBJECT (shell), "padding-color-dialog", NULL);
      break;

    default:
      break;
    }
}