view-commands.c 20 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 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153
  switch ((GimpActionSelectType) value)
    {
    case GIMP_ACTION_SELECT_FIRST:
      gimp_display_shell_scale (shell, GIMP_ZOOM_TO, 1.0 / 256.0);
      break;

    case GIMP_ACTION_SELECT_LAST:
      gimp_display_shell_scale (shell, GIMP_ZOOM_TO, 256.0);
      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 155 156
      scale = gimp_zoom_model_zoom_step (GIMP_ZOOM_OUT, scale);
      scale = gimp_zoom_model_zoom_step (GIMP_ZOOM_OUT, scale);
      scale = gimp_zoom_model_zoom_step (GIMP_ZOOM_OUT, scale);
157 158 159 160
      gimp_display_shell_scale (shell, GIMP_ZOOM_TO, scale);
      break;

    case GIMP_ACTION_SELECT_SKIP_NEXT:
161 162 163
      scale = gimp_zoom_model_zoom_step (GIMP_ZOOM_IN, scale);
      scale = gimp_zoom_model_zoom_step (GIMP_ZOOM_IN, scale);
      scale = gimp_zoom_model_zoom_step (GIMP_ZOOM_IN, scale);
164 165 166 167 168 169
      gimp_display_shell_scale (shell, GIMP_ZOOM_TO, scale);
      break;

    default:
      scale = action_select_value ((GimpActionSelectType) value,
                                   scale,
170
                                   0.0, 512.0,
171 172 173
                                   1.0, 16.0,
                                   FALSE);

174 175 176
      /* 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;
177 178 179 180

      gimp_display_shell_scale (shell, GIMP_ZOOM_TO, scale);
      break;
    }
181 182
}

Michael Natterer's avatar
Michael Natterer committed
183
void
184 185 186
view_zoom_explicit_cmd_callback (GtkAction *action,
                                 GtkAction *current,
                                 gpointer   data)
Michael Natterer's avatar
Michael Natterer committed
187
{
188 189
  GimpDisplay      *gdisp;
  GimpDisplayShell *shell;
190
  gint              value;
Michael Natterer's avatar
Michael Natterer committed
191
  return_if_no_display (gdisp, data);
Michael Natterer's avatar
Michael Natterer committed
192

193 194
  shell = GIMP_DISPLAY_SHELL (gdisp->shell);

195
  value = gtk_radio_action_get_current_value (GTK_RADIO_ACTION (action));
196

197
  if (value != 0 /* not Other... */)
198 199 200 201
    {
      if (fabs (value - shell->scale) > 0.0001)
        gimp_display_shell_scale (shell, GIMP_ZOOM_TO, (gdouble) value / 10000);
    }
202 203
}

204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223
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
224
void
225
view_dot_for_dot_cmd_callback (GtkAction *action,
226
                               gpointer   data)
Michael Natterer's avatar
Michael Natterer committed
227
{
228 229
  GimpDisplay      *gdisp;
  GimpDisplayShell *shell;
230
  gboolean          active;
Michael Natterer's avatar
Michael Natterer committed
231
  return_if_no_display (gdisp, data);
Michael Natterer's avatar
Michael Natterer committed
232

233 234
  shell = GIMP_DISPLAY_SHELL (gdisp->shell);

235 236 237
  active = gtk_toggle_action_get_active (GTK_TOGGLE_ACTION (action));

  if (active != shell->dot_for_dot)
238
    {
239
      gimp_display_shell_scale_set_dot_for_dot (shell, active);
240

241
      SET_ACTIVE (shell->menubar_manager, "view-dot-for-dot",
242
                  shell->dot_for_dot);
243 244

      if (IS_ACTIVE_DISPLAY (gdisp))
245
        SET_ACTIVE (shell->popup_manager, "view-dot-for-dot",
246
                    shell->dot_for_dot);
247
    }
Michael Natterer's avatar
Michael Natterer committed
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 290 291 292 293 294 295
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
296
void
297
view_navigation_window_cmd_callback (GtkAction *action,
298
                                     gpointer   data)
Michael Natterer's avatar
Michael Natterer committed
299
{
Michael Natterer's avatar
Michael Natterer committed
300 301
  GimpDisplay      *gdisp;
  GimpDisplayShell *shell;
Michael Natterer's avatar
Michael Natterer committed
302
  return_if_no_display (gdisp, data);
Michael Natterer's avatar
Michael Natterer committed
303

Michael Natterer's avatar
Michael Natterer committed
304 305
  shell = GIMP_DISPLAY_SHELL (gdisp->shell);

Michael Natterer's avatar
Michael Natterer committed
306
  gimp_dialog_factory_dialog_raise (global_dock_factory,
307
                                    gtk_widget_get_screen (gdisp->shell),
Michael Natterer's avatar
Michael Natterer committed
308
                                    "gimp-navigation-view", -1);
Michael Natterer's avatar
Michael Natterer committed
309 310
}

311
void
312
view_display_filters_cmd_callback (GtkAction *action,
313 314 315 316 317 318 319 320
                                   gpointer   data)
{
  GimpDisplay      *gdisp;
  GimpDisplayShell *shell;
  return_if_no_display (gdisp, data);

  shell = GIMP_DISPLAY_SHELL (gdisp->shell);

321 322 323 324 325 326 327 328 329 330
  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));
331 332
}

Michael Natterer's avatar
Michael Natterer committed
333
void
334
view_toggle_selection_cmd_callback (GtkAction *action,
335
                                    gpointer   data)
Michael Natterer's avatar
Michael Natterer committed
336
{
337 338
  GimpDisplay      *gdisp;
  GimpDisplayShell *shell;
339
  gboolean          active;
Michael Natterer's avatar
Michael Natterer committed
340
  return_if_no_display (gdisp, data);
Michael Natterer's avatar
Michael Natterer committed
341

342 343
  shell = GIMP_DISPLAY_SHELL (gdisp->shell);

344 345 346
  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
347 348 349
}

void
350
view_toggle_layer_boundary_cmd_callback (GtkAction *action,
Michael Natterer's avatar
Michael Natterer committed
351 352 353 354
                                         gpointer   data)
{
  GimpDisplay      *gdisp;
  GimpDisplayShell *shell;
355
  gboolean          active;
Michael Natterer's avatar
Michael Natterer committed
356 357 358 359
  return_if_no_display (gdisp, data);

  shell = GIMP_DISPLAY_SHELL (gdisp->shell);

360 361 362
  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
363 364
}

365
void
366
view_toggle_menubar_cmd_callback (GtkAction *action,
367 368 369 370
                                  gpointer   data)
{
  GimpDisplay      *gdisp;
  GimpDisplayShell *shell;
371
  gboolean          active;
372 373 374 375
  return_if_no_display (gdisp, data);

  shell = GIMP_DISPLAY_SHELL (gdisp->shell);

376 377 378
  active = gtk_toggle_action_get_active (GTK_TOGGLE_ACTION (action));

  gimp_display_shell_set_show_menubar (shell, active);
379 380
}

Michael Natterer's avatar
Michael Natterer committed
381
void
382
view_toggle_rulers_cmd_callback (GtkAction *action,
383
                                 gpointer   data)
Michael Natterer's avatar
Michael Natterer committed
384
{
385 386
  GimpDisplay      *gdisp;
  GimpDisplayShell *shell;
387
  gboolean          active;
Michael Natterer's avatar
Michael Natterer committed
388
  return_if_no_display (gdisp, data);
Michael Natterer's avatar
Michael Natterer committed
389

Michael Natterer's avatar
Michael Natterer committed
390 391
  shell = GIMP_DISPLAY_SHELL (gdisp->shell);

392 393 394
  active = gtk_toggle_action_get_active (GTK_TOGGLE_ACTION (action));

  gimp_display_shell_set_show_rulers (shell, active);
395
}
396

397
void
398
view_toggle_scrollbars_cmd_callback (GtkAction *action,
399 400 401 402
                                     gpointer   data)
{
  GimpDisplay      *gdisp;
  GimpDisplayShell *shell;
403
  gboolean          active;
404
  return_if_no_display (gdisp, data);
405

406 407
  shell = GIMP_DISPLAY_SHELL (gdisp->shell);

408 409 410
  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
411 412 413
}

void
414
view_toggle_statusbar_cmd_callback (GtkAction *action,
415
                                    gpointer   data)
Michael Natterer's avatar
Michael Natterer committed
416
{
Michael Natterer's avatar
Michael Natterer committed
417 418
  GimpDisplay      *gdisp;
  GimpDisplayShell *shell;
419
  gboolean          active;
Michael Natterer's avatar
Michael Natterer committed
420
  return_if_no_display (gdisp, data);
Michael Natterer's avatar
Michael Natterer committed
421

Michael Natterer's avatar
Michael Natterer committed
422 423
  shell = GIMP_DISPLAY_SHELL (gdisp->shell);

424 425 426
  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
427 428 429
}

void
430
view_toggle_guides_cmd_callback (GtkAction *action,
431
                                 gpointer   data)
Michael Natterer's avatar
Michael Natterer committed
432
{
433 434
  GimpDisplay      *gdisp;
  GimpDisplayShell *shell;
435
  gboolean          active;
Michael Natterer's avatar
Michael Natterer committed
436
  return_if_no_display (gdisp, data);
Michael Natterer's avatar
Michael Natterer committed
437

438 439
  shell = GIMP_DISPLAY_SHELL (gdisp->shell);

440 441 442
  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
443 444
}

445
void
446 447
view_toggle_grid_cmd_callback (GtkAction *action,
                               gpointer   data)
448 449 450 451 452 453 454 455 456 457
{
  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));

458
  gimp_display_shell_set_show_grid (shell, active);
459 460
}

Michael Natterer's avatar
Michael Natterer committed
461
void
462 463
view_toggle_sample_points_cmd_callback (GtkAction *action,
                                        gpointer   data)
Michael Natterer's avatar
Michael Natterer committed
464
{
465 466
  GimpDisplay      *gdisp;
  GimpDisplayShell *shell;
467
  gboolean          active;
Michael Natterer's avatar
Michael Natterer committed
468
  return_if_no_display (gdisp, data);
Michael Natterer's avatar
Michael Natterer committed
469

470
  shell = GIMP_DISPLAY_SHELL (gdisp->shell);
471

472
  active = gtk_toggle_action_get_active (GTK_TOGGLE_ACTION (action));
473

474
  gimp_display_shell_set_show_sample_points (shell, active);
Michael Natterer's avatar
Michael Natterer committed
475 476
}

477
void
478 479
view_snap_to_guides_cmd_callback (GtkAction *action,
                                  gpointer   data)
480 481 482
{
  GimpDisplay      *gdisp;
  GimpDisplayShell *shell;
483
  gboolean          active;
484 485 486 487
  return_if_no_display (gdisp, data);

  shell = GIMP_DISPLAY_SHELL (gdisp->shell);

488
  active = gtk_toggle_action_get_active (GTK_TOGGLE_ACTION (action));
489

490
  gimp_display_shell_set_snap_to_guides (shell, active);
491 492 493
}

void
494
view_snap_to_grid_cmd_callback (GtkAction *action,
495 496 497 498
                                gpointer   data)
{
  GimpDisplay      *gdisp;
  GimpDisplayShell *shell;
499
  gboolean          active;
500 501 502 503
  return_if_no_display (gdisp, data);

  shell = GIMP_DISPLAY_SHELL (gdisp->shell);

504
  active = gtk_toggle_action_get_active (GTK_TOGGLE_ACTION (action));
505

506
  gimp_display_shell_set_snap_to_grid (shell, active);
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 535 536 537 538 539 540
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);
}

541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565
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:
566
      g_object_set_data (G_OBJECT (shell), "padding-color-dialog", NULL);
567 568 569 570 571 572 573 574 575

      options->padding_mode_set = TRUE;

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

    case GIMP_CANVAS_PADDING_MODE_CUSTOM:
      {
576
        GtkWidget *color_dialog;
577

578
        color_dialog = g_object_get_data (G_OBJECT (shell),
579
                                          "padding-color-dialog");
580

581
        if (! color_dialog)
582
          {
583 584 585 586 587 588 589 590 591 592 593 594 595
            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);

596 597
            g_object_set_data_full (G_OBJECT (shell), "padding-color-dialog",
                                    color_dialog,
598
                                    (GDestroyNotify) gtk_widget_destroy);
599 600
          }

601
        gtk_window_present (GTK_WINDOW (color_dialog));
602 603 604 605
      }
      break;

    case GIMP_CANVAS_PADDING_MODE_RESET:
606
      g_object_set_data (G_OBJECT (shell), "padding-color-dialog", NULL);
607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628

      {
        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
629
void
630
view_shrink_wrap_cmd_callback (GtkAction *action,
631
                               gpointer   data)
Michael Natterer's avatar
Michael Natterer committed
632
{
633
  GimpDisplay *gdisp;
Michael Natterer's avatar
Michael Natterer committed
634
  return_if_no_display (gdisp, data);
Michael Natterer's avatar
Michael Natterer committed
635

Michael Natterer's avatar
Michael Natterer committed
636
  gimp_display_shell_scale_shrink_wrap (GIMP_DISPLAY_SHELL (gdisp->shell));
Michael Natterer's avatar
Michael Natterer committed
637
}
638 639

void
640
view_fullscreen_cmd_callback (GtkAction *action,
641
                              gpointer   data)
642 643 644
{
  GimpDisplay      *gdisp;
  GimpDisplayShell *shell;
645
  gboolean          active;
646 647 648 649
  return_if_no_display (gdisp, data);

  shell = GIMP_DISPLAY_SHELL (gdisp->shell);

650 651 652
  active = gtk_toggle_action_get_active (GTK_TOGGLE_ACTION (action));

  gimp_display_shell_set_fullscreen (shell, active);
653 654 655
}

void
656 657 658
view_move_to_screen_cmd_callback (GtkAction *action,
                                  GtkAction *current,
                                  gpointer   data)
659 660
{
  GimpDisplay *gdisp;
661
  gint         value;
662 663
  return_if_no_display (gdisp, data);

664
  value = gtk_radio_action_get_current_value (GTK_RADIO_ACTION (action));
665

666
  if (value != gdk_screen_get_number (gtk_widget_get_screen (gdisp->shell)))
667
    {
668 669
      GdkDisplay *display;
      GdkScreen  *screen;
670

671 672
      display = gtk_widget_get_display (gdisp->shell);
      screen  = gdk_display_get_screen (display, value);
673

674 675 676
      if (screen)
        gtk_window_set_screen (GTK_WINDOW (gdisp->shell), screen);
    }
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 709 710 711 712 713 714


/*  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;
    }
}