layers-actions.c 17.6 KB
Newer Older
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
/* 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"

#include "actions-types.h"

#include "core/gimpimage.h"
#include "core/gimplayer.h"
29
#include "core/gimplayermask.h"
30 31 32 33 34 35 36
#include "core/gimplist.h"

#include "text/gimptextlayer.h"

#include "widgets/gimphelp-ids.h"
#include "widgets/gimpactiongroup.h"

37
#include "actions.h"
38
#include "image-commands.h"
39
#include "layers-actions.h"
Michael Natterer's avatar
Michael Natterer committed
40
#include "layers-commands.h"
41 42 43 44 45 46

#include "gimp-intl.h"


static GimpActionEntry layers_actions[] =
{
47 48
  { "layers-popup", GIMP_STOCK_LAYERS, N_("Layers Menu"), NULL, NULL, NULL,
    GIMP_HELP_LAYER_DIALOG },
49

50 51 52 53 54 55 56 57 58 59
  { "layers-menu",              NULL,                    N_("_Layer")        },
  { "layers-stack-menu",        NULL,                    N_("Stac_k")        },
  { "layers-colors-menu",       NULL,                    N_("_Colors")       },
  { "layers-colors-auto-menu",  NULL,                    N_("_Auto")         },
  { "layers-mask-menu",         NULL,                    N_("_Mask")         },
  { "layers-transparency-menu", NULL,                    N_("Tr_ansparency") },
  { "layers-transform-menu",    NULL,                    N_("_Transform")    },
  { "layers-properties-menu",   NULL,                    N_("_Properties")   },
  { "layers-opacity-menu",      GIMP_STOCK_TRANSPARENCY, N_("_Opacity")      },
  { "layers-mode-menu",         GIMP_STOCK_TOOL_PENCIL,  N_("Layer _Mode")   },
60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106

  { "layers-text-tool", GIMP_STOCK_TOOL_TEXT,
    N_("Te_xt Tool"), NULL, NULL,
    G_CALLBACK (layers_text_tool_cmd_callback),
    GIMP_HELP_TOOL_TEXT },

  { "layers-edit-attributes", GIMP_STOCK_EDIT,
    N_("_Edit Layer Attributes..."), NULL, NULL,
    G_CALLBACK (layers_edit_attributes_cmd_callback),
    GIMP_HELP_LAYER_EDIT },

  { "layers-new", GTK_STOCK_NEW,
    N_("_New Layer..."), "", NULL,
    G_CALLBACK (layers_new_cmd_callback),
    GIMP_HELP_LAYER_NEW },

  { "layers-duplicate", GIMP_STOCK_DUPLICATE,
    N_("D_uplicate Layer"), NULL, NULL,
    G_CALLBACK (layers_duplicate_cmd_callback),
    GIMP_HELP_LAYER_DUPLICATE },

  { "layers-delete", GTK_STOCK_DELETE,
    N_("_Delete Layer"), "", NULL,
    G_CALLBACK (layers_delete_cmd_callback),
    GIMP_HELP_LAYER_DELETE },

  { "layers-raise", GTK_STOCK_GO_UP,
    N_("_Raise Layer"), "", NULL,
    G_CALLBACK (layers_raise_cmd_callback),
    GIMP_HELP_LAYER_RAISE },

  { "layers-raise-to-top", GTK_STOCK_GOTO_TOP,
    N_("Layer to _Top"), "", NULL,
    G_CALLBACK (layers_raise_to_top_cmd_callback),
    GIMP_HELP_LAYER_RAISE_TO_TOP },

  { "layers-lower", GTK_STOCK_GO_DOWN,
    N_("_Lower Layer"), "", NULL,
    G_CALLBACK (layers_lower_cmd_callback),
    GIMP_HELP_LAYER_LOWER },

  { "layers-lower-to-bottom", GTK_STOCK_GOTO_BOTTOM,
    N_("Layer to _Bottom"), "", NULL,
    G_CALLBACK (layers_lower_to_bottom_cmd_callback),
    GIMP_HELP_LAYER_LOWER_TO_BOTTOM },

  { "layers-anchor", GIMP_STOCK_ANCHOR,
107 108
    N_("_Anchor Layer"), NULL,
    N_("Anchor floating layer"),
109 110 111 112 113 114 115 116 117 118
    G_CALLBACK (layers_anchor_cmd_callback),
    GIMP_HELP_LAYER_ANCHOR },

  { "layers-merge-down", GIMP_STOCK_MERGE_DOWN,
    N_("Merge Do_wn"), NULL, NULL,
    G_CALLBACK (layers_merge_down_cmd_callback),
    GIMP_HELP_LAYER_MERGE_DOWN },

  { "layers-merge-layers", NULL,
    N_("Merge _Visible Layers..."), NULL, NULL,
119
    G_CALLBACK (image_merge_layers_cmd_callback),
120 121 122 123
    GIMP_HELP_IMAGE_MERGE_LAYERS },

  { "layers-flatten-image", NULL,
    N_("_Flatten Image"), NULL, NULL,
124
    G_CALLBACK (image_flatten_image_cmd_callback),
125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146
    GIMP_HELP_IMAGE_FLATTEN },

  { "layers-text-discard", GIMP_STOCK_TOOL_TEXT,
    N_("_Discard Text Information"), NULL, NULL,
    G_CALLBACK (layers_text_discard_cmd_callback),
    GIMP_HELP_LAYER_TEXT_DISCARD },

  { "layers-resize", GIMP_STOCK_RESIZE,
    N_("Layer B_oundary Size..."), NULL, NULL,
    G_CALLBACK (layers_resize_cmd_callback),
    GIMP_HELP_LAYER_RESIZE },

  { "layers-resize-to-image", GIMP_STOCK_LAYER_TO_IMAGESIZE,
    N_("Layer to _Image Size"), NULL, NULL,
    G_CALLBACK (layers_resize_to_image_cmd_callback),
    GIMP_HELP_LAYER_RESIZE_TO_IMAGE },

  { "layers-scale", GIMP_STOCK_SCALE,
    N_("_Scale Layer..."), NULL, NULL,
    G_CALLBACK (layers_scale_cmd_callback),
    GIMP_HELP_LAYER_SCALE },

147 148 149 150 151
  { "layers-crop", GIMP_STOCK_TOOL_CROP,
    N_("Cr_op Layer"), NULL, NULL,
    G_CALLBACK (layers_crop_cmd_callback),
    GIMP_HELP_LAYER_CROP },

152 153 154 155 156
  { "layers-mask-add", GIMP_STOCK_LAYER_MASK,
    N_("Add La_yer Mask..."), NULL, NULL,
    G_CALLBACK (layers_mask_add_cmd_callback),
    GIMP_HELP_LAYER_MASK_ADD },

157 158 159 160 161 162
  { "layers-alpha-add", GIMP_STOCK_TRANSPARENCY,
    N_("Add Alpha C_hannel"), NULL, NULL,
    G_CALLBACK (layers_alpha_add_cmd_callback),
    GIMP_HELP_LAYER_ALPHA_ADD }
};

163
static GimpToggleActionEntry layers_toggle_actions[] =
164
{
165
  { "layers-preserve-transparency", GIMP_STOCK_TRANSPARENCY,
166
    N_("Keep Transparency"), NULL, NULL,
167 168
    G_CALLBACK (layers_preserve_trans_cmd_callback),
    FALSE,
169
    GIMP_HELP_LAYER_KEEP_TRANSPARENCY },
170 171

  { "layers-mask-edit", GIMP_STOCK_EDIT,
172 173 174
    N_("Edit Layer Mask"), NULL, NULL,
    G_CALLBACK (layers_mask_edit_cmd_callback),
    FALSE,
175
    GIMP_HELP_LAYER_MASK_EDIT },
176

177
  { "layers-mask-show", GIMP_STOCK_VISIBLE,
178 179 180
    N_("Show Layer Mask"), NULL, NULL,
    G_CALLBACK (layers_mask_show_cmd_callback),
    FALSE,
181
    GIMP_HELP_LAYER_MASK_SHOW },
182 183 184 185 186

  { "layers-mask-disable", NULL,
    N_("Disable Layer Mask"), NULL, NULL,
    G_CALLBACK (layers_mask_disable_cmd_callback),
    FALSE,
187
    GIMP_HELP_LAYER_MASK_DISABLE }
188 189
};

190 191
static GimpEnumActionEntry layers_mask_apply_actions[] =
{
192 193
  { "layers-mask-apply", NULL,
    N_("Apply Layer _Mask"), NULL, NULL,
194
    GIMP_MASK_APPLY,
195 196 197 198
    GIMP_HELP_LAYER_MASK_APPLY },

  { "layers-mask-delete", GTK_STOCK_DELETE,
    N_("Delete Layer Mas_k"), "", NULL,
199 200
    GIMP_MASK_DISCARD,
    GIMP_HELP_LAYER_MASK_DELETE }
201 202 203 204 205 206 207 208 209
};

static GimpEnumActionEntry layers_mask_to_selection_actions[] =
{
  { "layers-mask-selection-replace", GIMP_STOCK_SELECTION_REPLACE,
    N_("_Mask to Selection"), NULL, NULL,
    GIMP_CHANNEL_OP_REPLACE,
    GIMP_HELP_LAYER_MASK_SELECTION_REPLACE },

210
  { "layers-mask-selection-add", GIMP_STOCK_SELECTION_ADD,
211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242
    N_("_Add to Selection"), NULL, NULL,
    GIMP_CHANNEL_OP_ADD,
    GIMP_HELP_LAYER_MASK_SELECTION_ADD },

  { "layers-mask-selection-subtract", GIMP_STOCK_SELECTION_SUBTRACT,
    N_("_Subtract from Selection"), NULL, NULL,
    GIMP_CHANNEL_OP_SUBTRACT,
    GIMP_HELP_LAYER_MASK_SELECTION_SUBTRACT },

  { "layers-mask-selection-intersect", GIMP_STOCK_SELECTION_INTERSECT,
    N_("_Intersect with Selection"), NULL, NULL,
    GIMP_CHANNEL_OP_INTERSECT,
    GIMP_HELP_LAYER_MASK_SELECTION_INTERSECT }
};

static GimpEnumActionEntry layers_alpha_to_selection_actions[] =
{
  { "layers-alpha-selection-replace", GIMP_STOCK_SELECTION_REPLACE,
    N_("Al_pha to Selection"), NULL, NULL,
    GIMP_CHANNEL_OP_REPLACE,
    GIMP_HELP_LAYER_ALPHA_SELECTION_REPLACE },

  { "layers-alpha-selection-add", GIMP_STOCK_SELECTION_ADD,
    N_("A_dd to Selection"), NULL, NULL,
    GIMP_CHANNEL_OP_ADD,
    GIMP_HELP_LAYER_ALPHA_SELECTION_ADD },

  { "layers-alpha-selection-subtract", GIMP_STOCK_SELECTION_SUBTRACT,
    N_("_Subtract from Selection"), NULL, NULL,
    GIMP_CHANNEL_OP_SUBTRACT,
    GIMP_HELP_LAYER_ALPHA_SELECTION_SUBTRACT },

243
  { "layers-alpha-selection-intersect", GIMP_STOCK_SELECTION_INTERSECT,
244 245 246 247 248
    N_("_Intersect with Selection"), NULL, NULL,
    GIMP_CHANNEL_OP_INTERSECT,
    GIMP_HELP_LAYER_ALPHA_SELECTION_INTERSECT }
};

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
static GimpEnumActionEntry layers_select_actions[] =
{
  { "layers-select-top", NULL,
    N_("Select _Top Layer"), "Home", NULL,
    GIMP_ACTION_SELECT_FIRST,
    GIMP_HELP_LAYER_TOP },

  { "layers-select-bottom", NULL,
    N_("Select _Bottom Layer"), "End", NULL,
    GIMP_ACTION_SELECT_LAST,
    GIMP_HELP_LAYER_BOTTOM },

  { "layers-select-previous", NULL,
    N_("Select _Previous Layer"), "Prior", NULL,
    GIMP_ACTION_SELECT_PREVIOUS,
    GIMP_HELP_LAYER_PREVIOUS },

  { "layers-select-next", NULL,
    N_("Select _Next Layer"), "Next", NULL,
    GIMP_ACTION_SELECT_NEXT,
    GIMP_HELP_LAYER_NEXT }
};

static GimpEnumActionEntry layers_opacity_actions[] =
{
  { "layers-opacity-set", GIMP_STOCK_TRANSPARENCY,
    N_("Set Opacity"), NULL, NULL,
    GIMP_ACTION_SELECT_SET,
277 278
    GIMP_HELP_LAYER_OPACITY },
  { "layers-opacity-transparent", GIMP_STOCK_TRANSPARENCY,
279 280
    "Completely Transparent", NULL, NULL,
    GIMP_ACTION_SELECT_FIRST,
281 282
    GIMP_HELP_LAYER_OPACITY },
  { "layers-opacity-opaque", GIMP_STOCK_TRANSPARENCY,
283 284
    "Completely Opaque", NULL, NULL,
    GIMP_ACTION_SELECT_LAST,
285 286
    GIMP_HELP_LAYER_OPACITY },
  { "layers-opacity-decrease", GIMP_STOCK_TRANSPARENCY,
287 288
    "More Transparent", NULL, NULL,
    GIMP_ACTION_SELECT_PREVIOUS,
289 290
    GIMP_HELP_LAYER_OPACITY },
  { "layers-opacity-increase", GIMP_STOCK_TRANSPARENCY,
291 292
    "More Opaque", NULL, NULL,
    GIMP_ACTION_SELECT_NEXT,
293 294
    GIMP_HELP_LAYER_OPACITY },
  { "layers-opacity-decrease-skip", GIMP_STOCK_TRANSPARENCY,
295 296
    "10% More Transparent", NULL, NULL,
    GIMP_ACTION_SELECT_SKIP_PREVIOUS,
297 298
    GIMP_HELP_LAYER_OPACITY },
  { "layers-opacity-increase-skip", GIMP_STOCK_TRANSPARENCY,
299 300
    "10% More Opaque", NULL, NULL,
    GIMP_ACTION_SELECT_SKIP_NEXT,
301
    GIMP_HELP_LAYER_OPACITY }
302 303
};

304
static GimpEnumActionEntry layers_mode_actions[] =
305
{
306 307
  { "layers-mode-first", GIMP_STOCK_TOOL_PENCIL,
    "First Layer Mode", NULL, NULL,
308
    GIMP_ACTION_SELECT_FIRST,
309 310 311
    GIMP_HELP_LAYER_MODE },
  { "layers-mode-last", GIMP_STOCK_TOOL_PENCIL,
    "Last Layer Mode", NULL, NULL,
312
    GIMP_ACTION_SELECT_LAST,
313 314 315
    GIMP_HELP_LAYER_MODE },
  { "layers-mode-previous", GIMP_STOCK_TOOL_PENCIL,
    "Previous Layer Mode", NULL, NULL,
316
    GIMP_ACTION_SELECT_PREVIOUS,
317 318 319
    GIMP_HELP_LAYER_MODE },
  { "layers-mode-next", GIMP_STOCK_TOOL_PENCIL,
    "Next Layer Mode", NULL, NULL,
320
    GIMP_ACTION_SELECT_NEXT,
321
    GIMP_HELP_LAYER_MODE }
322 323
};

324

325
void
326
layers_actions_setup (GimpActionGroup *group)
327 328 329
{
  gimp_action_group_add_actions (group,
                                 layers_actions,
330
                                 G_N_ELEMENTS (layers_actions));
331

332 333 334 335
  gimp_action_group_add_toggle_actions (group,
                                        layers_toggle_actions,
                                        G_N_ELEMENTS (layers_toggle_actions));

336 337 338 339 340
  gimp_action_group_add_enum_actions (group,
                                      layers_mask_apply_actions,
                                      G_N_ELEMENTS (layers_mask_apply_actions),
                                      G_CALLBACK (layers_mask_apply_cmd_callback));

341 342 343
  gimp_action_group_add_enum_actions (group,
                                      layers_mask_to_selection_actions,
                                      G_N_ELEMENTS (layers_mask_to_selection_actions),
344
                                      G_CALLBACK (layers_mask_to_selection_cmd_callback));
345 346 347 348

  gimp_action_group_add_enum_actions (group,
                                      layers_alpha_to_selection_actions,
                                      G_N_ELEMENTS (layers_alpha_to_selection_actions),
349
                                      G_CALLBACK (layers_alpha_to_selection_cmd_callback));
350 351 352 353 354

  gimp_action_group_add_enum_actions (group,
                                      layers_select_actions,
                                      G_N_ELEMENTS (layers_select_actions),
                                      G_CALLBACK (layers_select_cmd_callback));
355

356 357 358 359
  gimp_action_group_add_enum_actions (group,
                                      layers_opacity_actions,
                                      G_N_ELEMENTS (layers_opacity_actions),
                                      G_CALLBACK (layers_opacity_cmd_callback));
360 361

  gimp_action_group_add_enum_actions (group,
362 363 364
                                      layers_mode_actions,
                                      G_N_ELEMENTS (layers_mode_actions),
                                      G_CALLBACK (layers_mode_cmd_callback));
365 366 367 368 369 370
}

void
layers_actions_update (GimpActionGroup *group,
                       gpointer         data)
{
371 372 373 374 375
  GimpImage     *gimage;
  GimpLayer     *layer      = NULL;
  GimpLayerMask *mask       = FALSE;    /*  layer mask             */
  gboolean       fs         = FALSE;    /*  floating sel           */
  gboolean       ac         = FALSE;    /*  active channel         */
376
  gboolean       sel        = FALSE;
377 378 379 380 381 382 383
  gboolean       alpha      = FALSE;    /*  alpha channel present  */
  gboolean       indexed    = FALSE;    /*  is indexed             */
  gboolean       preserve   = FALSE;
  gboolean       next_alpha = FALSE;
  gboolean       text_layer = FALSE;
  GList         *next       = NULL;
  GList         *prev       = NULL;
384

385
  gimage = action_data_get_image (data);
386 387 388 389 390 391 392 393

  if (gimage)
    {
      GList *list;

      layer = gimp_image_get_active_layer (gimage);

      if (layer)
394 395 396 397 398
        {
          mask = gimp_layer_get_mask (layer);

          preserve = gimp_layer_get_preserve_trans (layer);
        }
399

400 401 402
      fs  = (gimp_image_floating_sel (gimage) != NULL);
      ac  = (gimp_image_get_active_channel (gimage) != NULL);
      sel = ! gimp_channel_is_empty (gimp_image_get_mask (gimage));
403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432

      alpha = layer && gimp_drawable_has_alpha (GIMP_DRAWABLE (layer));

      indexed = (gimp_image_base_type (gimage) == GIMP_INDEXED);

      for (list = GIMP_LIST (gimage->layers)->list;
           list;
           list = g_list_next (list))
        {
          if (layer == (GimpLayer *) list->data)
            {
              prev = g_list_previous (list);
              next = g_list_next (list);
              break;
            }
        }

      if (next)
        next_alpha = gimp_drawable_has_alpha (GIMP_DRAWABLE (next->data));
      else
        next_alpha = FALSE;

      text_layer = (layer &&
                    gimp_drawable_is_text_layer (GIMP_DRAWABLE (layer)));
    }

#define SET_VISIBLE(action,condition) \
        gimp_action_group_set_action_visible (group, action, (condition) != 0)
#define SET_SENSITIVE(action,condition) \
        gimp_action_group_set_action_sensitive (group, action, (condition) != 0)
433 434
#define SET_ACTIVE(action,condition) \
        gimp_action_group_set_action_active (group, action, (condition) != 0)
435 436 437 438

  SET_VISIBLE   ("layers-text-tool",       text_layer && !ac);
  SET_SENSITIVE ("layers-edit-attributes", layer && !fs && !ac);

439
  SET_SENSITIVE ("layers-new",          gimage);
440 441 442 443 444
  SET_SENSITIVE ("layers-duplicate",    layer && !fs && !ac);
  SET_SENSITIVE ("layers-delete",       layer && !ac);

  SET_SENSITIVE ("layers-select-top",      layer && !fs && !ac && prev);
  SET_SENSITIVE ("layers-select-bottom",   layer && !fs && !ac && next);
445 446
  SET_SENSITIVE ("layers-select-previous", layer && !fs && !ac && prev);
  SET_SENSITIVE ("layers-select-next",     layer && !fs && !ac && next);
447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462

  SET_SENSITIVE ("layers-raise",           layer && !fs && !ac && alpha && prev);
  SET_SENSITIVE ("layers-raise-to-top",    layer && !fs && !ac && alpha && prev);
  SET_SENSITIVE ("layers-lower",           layer && !fs && !ac && next && next_alpha);
  SET_SENSITIVE ("layers-lower-to-bottom", layer && !fs && !ac && next && next_alpha);

  SET_SENSITIVE ("layers-anchor",        layer &&  fs && !ac);
  SET_SENSITIVE ("layers-merge-down",    layer && !fs && !ac && next);
  SET_SENSITIVE ("layers-merge-layers",  layer && !fs && !ac);
  SET_SENSITIVE ("layers-flatten-image", layer && !fs && !ac);
  SET_VISIBLE   ("layers-text-discard",  text_layer && !ac);

  SET_SENSITIVE ("layers-resize",          layer && !ac);
  SET_SENSITIVE ("layers-resize-to-image", layer && !ac);
  SET_SENSITIVE ("layers-scale",           layer && !ac);

463 464
  SET_SENSITIVE ("layers-crop",            layer && sel);

465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480
  SET_SENSITIVE ("layers-alpha-add", layer && !fs && !alpha);

  SET_SENSITIVE ("layers-preserve-transparency", layer);
  SET_ACTIVE    ("layers-preserve-transparency", preserve);

  SET_SENSITIVE ("layers-mask-add",    layer && !fs && !ac && !mask && alpha);
  SET_SENSITIVE ("layers-mask-apply",  layer && !fs && !ac &&  mask);
  SET_SENSITIVE ("layers-mask-delete", layer && !fs && !ac &&  mask);

  SET_SENSITIVE ("layers-mask-edit",    layer && !fs && !ac &&  mask);
  SET_SENSITIVE ("layers-mask-show",    layer && !fs && !ac &&  mask);
  SET_SENSITIVE ("layers-mask-disable", layer && !fs && !ac &&  mask);

  SET_ACTIVE ("layers-mask-edit",    mask && gimp_layer_mask_get_edit (mask));
  SET_ACTIVE ("layers-mask-show",    mask && gimp_layer_mask_get_show (mask));
  SET_ACTIVE ("layers-mask-disable", mask && !gimp_layer_mask_get_apply (mask));
481

482 483 484 485
  SET_SENSITIVE ("layers-mask-selection-replace",   layer && !fs && !ac && mask);
  SET_SENSITIVE ("layers-mask-selection-add",       layer && !fs && !ac && mask);
  SET_SENSITIVE ("layers-mask-selection-subtract",  layer && !fs && !ac && mask);
  SET_SENSITIVE ("layers-mask-selection-intersect", layer && !fs && !ac && mask);
486 487 488 489 490 491 492 493

  SET_SENSITIVE ("layers-alpha-selection-replace",   layer && !fs && !ac);
  SET_SENSITIVE ("layers-alpha-selection-add",       layer && !fs && !ac);
  SET_SENSITIVE ("layers-alpha-selection-subtract",  layer && !fs && !ac);
  SET_SENSITIVE ("layers-alpha-selection-intersect", layer && !fs && !ac);

#undef SET_VISIBLE
#undef SET_SENSITIVE
494
#undef SET_ACTIVE
495
}