Merge lp:~ted/libdbusmenu/good-defaults-are-well-good into lp:libdbusmenu/0.5

Proposed by Ted Gould on 2011-02-22
Status: Merged
Merged at revision: 217
Proposed branch: lp:~ted/libdbusmenu/good-defaults-are-well-good
Merge into: lp:libdbusmenu/0.5
Diff against target: 5137 lines (+990/-1624)
7 files modified
.bzrignore (+1/-0)
libdbusmenu-glib/Makefile.am (+2/-0)
libdbusmenu-glib/defaults.c (+291/-0)
libdbusmenu-glib/defaults.h (+86/-0)
libdbusmenu-glib/menuitem.c (+89/-8)
tests/test-gtk-label.json (+13/-13)
tests/test-json-01.json (+508/-1603)
To merge this branch: bzr merge lp:~ted/libdbusmenu/good-defaults-are-well-good
Reviewer Review Type Date Requested Status
Mikkel Kamstrup Erlandsen (community) 2011-02-22 Approve on 2011-02-22
Review via email: mp+50691@code.launchpad.net

Description of the change

This changes dbusmenu so that it actually tracks the default values for the standard fields. It will then avoid sending default values over the bus to save data. This merge seems really large because of the test data that had to change. The test-glib-json-01.json file as gone from 135KB to 92KB by removing the default values.

To post a comment you must log in.

 review approve

Nice work!

review: Approve
Sebastien Bacher (seb128) wrote :

The commit there seems to create menu refreshing issues, see https://bugs.launchpad.net/ubuntu/+source/libdbusmenu/+bug/723873

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file '.bzrignore'
2--- .bzrignore 2011-01-27 19:54:18 +0000
3+++ .bzrignore 2011-02-22 04:06:19 +0000
4@@ -227,3 +227,4 @@
5 test-gtk-parser
6 test-gtk-parser-test
7 test-gtk-parser.xml
8+libdbusmenu-glib/libdbusmenu_glib_la-defaults.lo
9
10=== modified file 'libdbusmenu-glib/Makefile.am'
11--- libdbusmenu-glib/Makefile.am 2011-02-16 17:00:55 +0000
12+++ libdbusmenu-glib/Makefile.am 2011-02-22 04:06:19 +0000
13@@ -24,6 +24,8 @@
14 libdbusmenu_glib_la_SOURCES = \
15 dbus-menu-clean.xml.h \
16 dbus-menu-clean.xml.c \
17+ defaults.h \
18+ defaults.c \
19 menuitem.h \
20 menuitem.c \
21 menuitem-marshal.h \
22
23=== added file 'libdbusmenu-glib/defaults.c'
24--- libdbusmenu-glib/defaults.c 1970-01-01 00:00:00 +0000
25+++ libdbusmenu-glib/defaults.c 2011-02-22 04:06:19 +0000
26@@ -0,0 +1,291 @@
27+/*
28+A library to communicate a menu object set accross DBus and
29+track updates and maintain consistency.
30+
31+Copyright 2011 Canonical Ltd.
32+
33+Authors:
34+ Ted Gould <ted@canonical.com>
35+
36+This program is free software: you can redistribute it and/or modify it
37+under the terms of either or both of the following licenses:
38+
39+1) the GNU Lesser General Public License version 3, as published by the
40+Free Software Foundation; and/or
41+2) the GNU Lesser General Public License version 2.1, as published by
42+the Free Software Foundation.
43+
44+This program is distributed in the hope that it will be useful, but
45+WITHOUT ANY WARRANTY; without even the implied warranties of
46+MERCHANTABILITY, SATISFACTORY QUALITY or FITNESS FOR A PARTICULAR
47+PURPOSE. See the applicable version of the GNU Lesser General Public
48+License for more details.
49+
50+You should have received a copy of both the GNU Lesser General Public
51+License version 3 and version 2.1 along with this program. If not, see
52+<http://www.gnu.org/licenses/>
53+*/
54+
55+#ifdef HAVE_CONFIG_H
56+#include "config.h"
57+#endif
58+
59+#include <glib/gi18n.h>
60+
61+#include "defaults.h"
62+#include "menuitem.h"
63+#include "client.h"
64+
65+struct _DbusmenuDefaultsPrivate {
66+ GHashTable * types;
67+};
68+
69+typedef struct _DefaultEntry DefaultEntry;
70+struct _DefaultEntry {
71+ GVariantType * type;
72+ GVariant * value;
73+};
74+
75+#define DBUSMENU_DEFAULTS_GET_PRIVATE(o) \
76+(G_TYPE_INSTANCE_GET_PRIVATE ((o), DBUSMENU_TYPE_DEFAULTS, DbusmenuDefaultsPrivate))
77+
78+static void dbusmenu_defaults_class_init (DbusmenuDefaultsClass *klass);
79+static void dbusmenu_defaults_init (DbusmenuDefaults *self);
80+static void dbusmenu_defaults_dispose (GObject *object);
81+static void dbusmenu_defaults_finalize (GObject *object);
82+
83+static DefaultEntry * entry_create (const GVariantType * type, GVariant * variant);
84+static void entry_destroy (gpointer entry);
85+
86+G_DEFINE_TYPE (DbusmenuDefaults, dbusmenu_defaults, G_TYPE_OBJECT);
87+
88+static void
89+dbusmenu_defaults_class_init (DbusmenuDefaultsClass *klass)
90+{
91+ GObjectClass *object_class = G_OBJECT_CLASS (klass);
92+
93+ g_type_class_add_private (klass, sizeof (DbusmenuDefaultsPrivate));
94+
95+ object_class->dispose = dbusmenu_defaults_dispose;
96+ object_class->finalize = dbusmenu_defaults_finalize;
97+ return;
98+}
99+
100+static void
101+dbusmenu_defaults_init (DbusmenuDefaults *self)
102+{
103+ self->priv = DBUSMENU_DEFAULTS_GET_PRIVATE(self);
104+
105+ self->priv->types = g_hash_table_new_full(g_str_hash, g_str_equal, g_free, (GDestroyNotify)g_hash_table_destroy);
106+
107+ /* Standard defaults */
108+ dbusmenu_defaults_default_set(self, DBUSMENU_CLIENT_TYPES_DEFAULT, DBUSMENU_MENUITEM_PROP_VISIBLE, G_VARIANT_TYPE_BOOLEAN, g_variant_new_boolean(TRUE));
109+ dbusmenu_defaults_default_set(self, DBUSMENU_CLIENT_TYPES_DEFAULT, DBUSMENU_MENUITEM_PROP_ENABLED, G_VARIANT_TYPE_BOOLEAN, g_variant_new_boolean(TRUE));
110+ dbusmenu_defaults_default_set(self, DBUSMENU_CLIENT_TYPES_DEFAULT, DBUSMENU_MENUITEM_PROP_LABEL, G_VARIANT_TYPE_STRING, g_variant_new_string(_("Label Empty")));
111+ dbusmenu_defaults_default_set(self, DBUSMENU_CLIENT_TYPES_DEFAULT, DBUSMENU_MENUITEM_PROP_ICON_NAME, G_VARIANT_TYPE_STRING, NULL);
112+ dbusmenu_defaults_default_set(self, DBUSMENU_CLIENT_TYPES_DEFAULT, DBUSMENU_MENUITEM_PROP_TOGGLE_TYPE, G_VARIANT_TYPE_STRING, NULL);
113+ dbusmenu_defaults_default_set(self, DBUSMENU_CLIENT_TYPES_DEFAULT, DBUSMENU_MENUITEM_PROP_TOGGLE_STATE, G_VARIANT_TYPE_INT32, NULL);
114+ dbusmenu_defaults_default_set(self, DBUSMENU_CLIENT_TYPES_DEFAULT, DBUSMENU_MENUITEM_PROP_SHORTCUT, G_VARIANT_TYPE_ARRAY, NULL);
115+ dbusmenu_defaults_default_set(self, DBUSMENU_CLIENT_TYPES_DEFAULT, DBUSMENU_MENUITEM_PROP_CHILD_DISPLAY, G_VARIANT_TYPE_STRING, NULL);
116+
117+ /* Separator defaults */
118+ dbusmenu_defaults_default_set(self, DBUSMENU_CLIENT_TYPES_SEPARATOR, DBUSMENU_MENUITEM_PROP_VISIBLE, G_VARIANT_TYPE_BOOLEAN, g_variant_new_boolean(TRUE));
119+
120+ return;
121+}
122+
123+static void
124+dbusmenu_defaults_dispose (GObject *object)
125+{
126+ DbusmenuDefaults * self = DBUSMENU_DEFAULTS(object);
127+
128+ if (self->priv->types != NULL) {
129+ g_hash_table_destroy(self->priv->types);
130+ self->priv->types = NULL;
131+ }
132+
133+ G_OBJECT_CLASS (dbusmenu_defaults_parent_class)->dispose (object);
134+ return;
135+}
136+
137+static void
138+dbusmenu_defaults_finalize (GObject *object)
139+{
140+
141+ G_OBJECT_CLASS (dbusmenu_defaults_parent_class)->finalize (object);
142+ return;
143+}
144+
145+/* Create a new entry based on the info provided */
146+static DefaultEntry *
147+entry_create (const GVariantType * type, GVariant * variant)
148+{
149+ DefaultEntry * defentry = g_new0(DefaultEntry, 1);
150+
151+ if (type != NULL) {
152+ defentry->type = g_variant_type_copy(type);
153+ }
154+
155+ if (variant != NULL) {
156+ defentry->value = variant;
157+ g_variant_ref_sink(variant);
158+ }
159+
160+ return defentry;
161+}
162+
163+/* Destroy an entry */
164+static void
165+entry_destroy (gpointer entry)
166+{
167+ DefaultEntry * defentry = (DefaultEntry *)entry;
168+
169+ if (defentry->type != NULL) {
170+ g_variant_type_free(defentry->type);
171+ defentry->type = NULL;
172+ }
173+
174+ if (defentry->value != NULL) {
175+ g_variant_unref(defentry->value);
176+ defentry->value = NULL;
177+ }
178+
179+ g_free(defentry);
180+ return;
181+}
182+
183+static DbusmenuDefaults * default_defaults = NULL;
184+
185+/**
186+ * dbusmenu_defaults_ref_default:
187+ *
188+ * Get a reference to the default instance. If it doesn't exist this
189+ * function will create it.
190+ *
191+ * Return value: (transfer full): A reference to the defaults
192+ */
193+DbusmenuDefaults *
194+dbusmenu_defaults_ref_default (void)
195+{
196+ if (default_defaults == NULL) {
197+ default_defaults = DBUSMENU_DEFAULTS(g_object_new(DBUSMENU_TYPE_DEFAULTS, NULL));
198+ g_object_add_weak_pointer(G_OBJECT(default_defaults), (gpointer *)&default_defaults);
199+ } else {
200+ g_object_ref(default_defaults);
201+ }
202+
203+ return default_defaults;
204+}
205+
206+/**
207+ * dbusmenu_defaults_default_set:
208+ * @defaults: The #DbusmenuDefaults object to add to
209+ * @type: (allow-none): The #DbusmenuMenuitem type for this default if #NULL will default to #DBUSMENU_CLIENT_TYPE_DEFAULT
210+ * @property: Property name for the default
211+ * @prop_type: (allow-none): Type of the property for runtime checking. To disable checking set to #NULL.
212+ * @value: (allow-none): Default value for @property. #NULL if by default it is unset, but you want type checking from @prop_type.
213+ *
214+ * Sets up an entry in the defaults database for a given @property
215+ * and menuitem type @type. @prop_type and @value can both be #NULL
216+ * but both of them can not.
217+ */
218+void
219+dbusmenu_defaults_default_set (DbusmenuDefaults * defaults, const gchar * type, const gchar * property, const GVariantType * prop_type, GVariant * value)
220+{
221+ g_return_if_fail(DBUSMENU_IS_DEFAULTS(defaults));
222+ g_return_if_fail(property != NULL);
223+ g_return_if_fail(prop_type != NULL || value != NULL);
224+
225+ if (type == NULL) {
226+ type = DBUSMENU_CLIENT_TYPES_DEFAULT;
227+ }
228+
229+ GHashTable * prop_table = (GHashTable *)g_hash_table_lookup(defaults->priv->types, type);
230+
231+ /* We've never had a default for this type, so we need
232+ to create a table for it. */
233+ if (prop_table == NULL) {
234+ prop_table = g_hash_table_new_full(g_str_hash, g_str_equal, g_free, entry_destroy);
235+
236+ g_hash_table_insert(prop_table, g_strdup(property), entry_create(prop_type, value));
237+ g_hash_table_insert(defaults->priv->types, g_strdup(type), prop_table);
238+ } else {
239+ g_hash_table_replace(prop_table, g_strdup(property), entry_create(prop_type, value));
240+ }
241+
242+ return;
243+}
244+
245+/**
246+ * dbusmenu_defaults_default_get:
247+ * @defaults: The default database to use
248+ * @type: (allow-none): The #DbusmenuMenuitem type for this default if #NULL will default to #DBUSMENU_CLIENT_TYPE_DEFAULT
249+ * @property: Property name to lookup
250+ *
251+ * Gets an entry in the database for a give @property and @type.
252+ *
253+ * Return value: (transfer none): Returns a variant that does not
254+ * have it's ref count increased. If you want to keep it, you should
255+ * do that.
256+ */
257+GVariant *
258+dbusmenu_defaults_default_get (DbusmenuDefaults * defaults, const gchar * type, const gchar * property)
259+{
260+ g_return_val_if_fail(DBUSMENU_IS_DEFAULTS(defaults), NULL);
261+ g_return_val_if_fail(property != NULL, NULL);
262+
263+ if (type == NULL) {
264+ type = DBUSMENU_CLIENT_TYPES_DEFAULT;
265+ }
266+
267+ GHashTable * prop_table = (GHashTable *)g_hash_table_lookup(defaults->priv->types, type);
268+
269+ if (prop_table == NULL) {
270+ return NULL;
271+ }
272+
273+ DefaultEntry * entry = (DefaultEntry *)g_hash_table_lookup(prop_table, property);
274+
275+ if (entry == NULL) {
276+ return NULL;
277+ }
278+
279+ return entry->value;
280+}
281+
282+/**
283+ * dbusmenu_defaults_default_get_type:
284+ * @defaults: The default database to use
285+ * @type: (allow-none): The #DbusmenuMenuitem type for this default if #NULL will default to #DBUSMENU_CLIENT_TYPE_DEFAULT
286+ * @property: Property name to lookup
287+ *
288+ * Gets the type for an entry in the database for a give @property and @type.
289+ *
290+ * Return value: (transfer none): Returns a type for the given
291+ * @property value.
292+ */
293+GVariantType *
294+dbusmenu_defaults_default_get_type (DbusmenuDefaults * defaults, const gchar * type, const gchar * property)
295+{
296+ g_return_val_if_fail(DBUSMENU_IS_DEFAULTS(defaults), NULL);
297+ g_return_val_if_fail(property != NULL, NULL);
298+
299+ if (type == NULL) {
300+ type = DBUSMENU_CLIENT_TYPES_DEFAULT;
301+ }
302+
303+ GHashTable * prop_table = (GHashTable *)g_hash_table_lookup(defaults->priv->types, type);
304+
305+ if (prop_table == NULL) {
306+ return NULL;
307+ }
308+
309+ DefaultEntry * entry = (DefaultEntry *)g_hash_table_lookup(prop_table, property);
310+
311+ if (entry == NULL) {
312+ return NULL;
313+ }
314+
315+ return entry->type;
316+}
317+
318
319=== added file 'libdbusmenu-glib/defaults.h'
320--- libdbusmenu-glib/defaults.h 1970-01-01 00:00:00 +0000
321+++ libdbusmenu-glib/defaults.h 2011-02-22 04:06:19 +0000
322@@ -0,0 +1,86 @@
323+/*
324+A library to communicate a menu object set accross DBus and
325+track updates and maintain consistency.
326+
327+Copyright 2011 Canonical Ltd.
328+
329+Authors:
330+ Ted Gould <ted@canonical.com>
331+
332+This program is free software: you can redistribute it and/or modify it
333+under the terms of either or both of the following licenses:
334+
335+1) the GNU Lesser General Public License version 3, as published by the
336+Free Software Foundation; and/or
337+2) the GNU Lesser General Public License version 2.1, as published by
338+the Free Software Foundation.
339+
340+This program is distributed in the hope that it will be useful, but
341+WITHOUT ANY WARRANTY; without even the implied warranties of
342+MERCHANTABILITY, SATISFACTORY QUALITY or FITNESS FOR A PARTICULAR
343+PURPOSE. See the applicable version of the GNU Lesser General Public
344+License for more details.
345+
346+You should have received a copy of both the GNU Lesser General Public
347+License version 3 and version 2.1 along with this program. If not, see
348+<http://www.gnu.org/licenses/>
349+*/
350+
351+#ifndef __DBUSMENU_DEFAULTS_H__
352+#define __DBUSMENU_DEFAULTS_H__
353+
354+#include <glib.h>
355+#include <glib-object.h>
356+
357+G_BEGIN_DECLS
358+
359+#define DBUSMENU_TYPE_DEFAULTS (dbusmenu_defaults_get_type ())
360+#define DBUSMENU_DEFAULTS(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), DBUSMENU_TYPE_DEFAULTS, DbusmenuDefaults))
361+#define DBUSMENU_DEFAULTS_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), DBUSMENU_TYPE_DEFAULTS, DbusmenuDefaultsClass))
362+#define DBUSMENU_IS_DEFAULTS(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), DBUSMENU_TYPE_DEFAULTS))
363+#define DBUSMENU_IS_DEFAULTS_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), DBUSMENU_TYPE_DEFAULTS))
364+#define DBUSMENU_DEFAULTS_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), DBUSMENU_TYPE_DEFAULTS, DbusmenuDefaultsClass))
365+
366+typedef struct _DbusmenuDefaults DbusmenuDefaults;
367+typedef struct _DbusmenuDefaultsClass DbusmenuDefaultsClass;
368+typedef struct _DbusmenuDefaultsPrivate DbusmenuDefaultsPrivate;
369+
370+/**
371+ * DbusmenuDefaultsClass:
372+ *
373+ * All of the signals and functions for #DbusmenuDefaults
374+ */
375+struct _DbusmenuDefaultsClass {
376+ GObjectClass parent_class;
377+};
378+
379+/**
380+ * DbusmenuDefaults:
381+ *
382+ * A singleton to hold all of the defaults for the menuitems
383+ * so they can use those easily.
384+ */
385+struct _DbusmenuDefaults {
386+ GObject parent;
387+
388+ /*< Private >*/
389+ DbusmenuDefaultsPrivate * priv;
390+};
391+
392+GType dbusmenu_defaults_get_type (void);
393+DbusmenuDefaults * dbusmenu_defaults_ref_default (void);
394+void dbusmenu_defaults_default_set (DbusmenuDefaults * defaults,
395+ const gchar * type,
396+ const gchar * property,
397+ const GVariantType * prop_type,
398+ GVariant * value);
399+GVariant * dbusmenu_defaults_default_get (DbusmenuDefaults * defaults,
400+ const gchar * type,
401+ const gchar * property);
402+GVariantType * dbusmenu_defaults_default_get_type (DbusmenuDefaults * defaults,
403+ const gchar * type,
404+ const gchar * property);
405+
406+G_END_DECLS
407+
408+#endif
409
410=== modified file 'libdbusmenu-glib/menuitem.c'
411--- libdbusmenu-glib/menuitem.c 2011-02-21 12:12:33 +0000
412+++ libdbusmenu-glib/menuitem.c 2011-02-22 04:06:19 +0000
413@@ -33,6 +33,7 @@
414 #include "menuitem.h"
415 #include "menuitem-marshal.h"
416 #include "menuitem-private.h"
417+#include "defaults.h"
418
419 #ifdef MASSIVEDEBUGGING
420 #define LABEL(x) dbusmenu_menuitem_property_get(DBUSMENU_MENUITEM(x), DBUSMENU_MENUITEM_PROP_LABEL)
421@@ -59,6 +60,7 @@
422 GHashTable * properties;
423 gboolean root;
424 gboolean realized;
425+ DbusmenuDefaults * defaults;
426 };
427
428 /* Signals */
429@@ -312,6 +314,8 @@
430
431 priv->root = FALSE;
432 priv->realized = FALSE;
433+
434+ priv->defaults = dbusmenu_defaults_ref_default();
435
436 return;
437 }
438@@ -328,6 +332,11 @@
439 g_list_free(priv->children);
440 priv->children = NULL;
441
442+ if (priv->defaults != NULL) {
443+ g_object_unref(priv->defaults);
444+ priv->defaults = NULL;
445+ }
446+
447 G_OBJECT_CLASS (dbusmenu_menuitem_parent_class)->dispose (object);
448 return;
449 }
450@@ -425,6 +434,19 @@
451 return;
452 }
453
454+/* A helper function to get the type of the menuitem, this might
455+ be a candidate for optimization in the future. */
456+static const gchar *
457+menuitem_get_type (DbusmenuMenuitem * mi)
458+{
459+ DbusmenuMenuitemPrivate * priv = DBUSMENU_MENUITEM_GET_PRIVATE(mi);
460+ GVariant * currentval = (GVariant *)g_hash_table_lookup(priv->properties, DBUSMENU_MENUITEM_PROP_TYPE);
461+ if (currentval != NULL) {
462+ return g_variant_get_string(currentval, NULL);
463+ }
464+ return NULL;
465+}
466+
467 /* Public interface */
468
469 /**
470@@ -1004,17 +1026,49 @@
471
472 DbusmenuMenuitemPrivate * priv = DBUSMENU_MENUITEM_GET_PRIVATE(mi);
473
474+ const gchar * type = menuitem_get_type(mi);
475+
476+ /* Check the expected type to see if we want to have a warning */
477+ GVariantType * default_type = dbusmenu_defaults_default_get_type(priv->defaults, type, property);
478+ if (default_type != NULL) {
479+ /* If we have an expected type we should check to see if
480+ the value we've been given is of the same type and generate
481+ a warning if it isn't */
482+ if (!g_variant_is_of_type(value, default_type)) {
483+ g_warning("Setting menuitem property '%s' with value of type '%s' when expecting '%s'", property, g_variant_get_type_string(value), g_variant_type_peek_string(default_type));
484+ }
485+ }
486+
487+ /* Check the defaults database to see if we have a default
488+ for this property. */
489+ GVariant * default_value = dbusmenu_defaults_default_get(priv->defaults, type, property);
490+ if (default_value != NULL) {
491+ /* Now see if we're setting this to the same value as the
492+ default. If we are then we just want to swallow this variant
493+ and make the function behave like we're clearing it. */
494+ if (g_variant_equal(default_value, value)) {
495+ g_variant_ref_sink(value);
496+ g_variant_unref(value);
497+ value = NULL;
498+ }
499+ }
500+
501 gboolean replaced = FALSE;
502 gpointer currentval = g_hash_table_lookup(priv->properties, property);
503
504 if (value != NULL) {
505+ /* NOTE: We're only marking this as replaced if this is true
506+ but we're actually replacing it no matter. This is so that
507+ the variant passed in sticks around which the caller may
508+ expect. They shouldn't, but it's low cost to remove bugs. */
509+ if (currentval == NULL || !g_variant_equal((GVariant*)currentval, value)) {
510+ replaced = TRUE;
511+ }
512+
513 gchar * lprop = g_strdup(property);
514 g_variant_ref_sink(value);
515
516- if (currentval == NULL || !g_variant_equal((GVariant*)currentval, value)) {
517- g_hash_table_replace(priv->properties, lprop, value);
518- replaced = TRUE;
519- }
520+ g_hash_table_replace(priv->properties, lprop, value);
521 } else {
522 if (currentval != NULL) {
523 g_hash_table_remove(priv->properties, property);
524@@ -1027,7 +1081,15 @@
525 table. But the fact that there was a value is
526 the imporant part. */
527 if (currentval == NULL || replaced) {
528- g_signal_emit(G_OBJECT(mi), signals[PROPERTY_CHANGED], 0, property, value, TRUE);
529+ GVariant * signalval = value;
530+
531+ if (signalval == NULL) {
532+ /* Might also be NULL, but if it is we're definitely
533+ clearing this thing. */
534+ signalval = default_value;
535+ }
536+
537+ g_signal_emit(G_OBJECT(mi), signals[PROPERTY_CHANGED], 0, property, signalval, TRUE);
538 }
539
540 return TRUE;
541@@ -1074,7 +1136,13 @@
542
543 DbusmenuMenuitemPrivate * priv = DBUSMENU_MENUITEM_GET_PRIVATE(mi);
544
545- return (GVariant *)g_hash_table_lookup(priv->properties, property);
546+ GVariant * currentval = (GVariant *)g_hash_table_lookup(priv->properties, property);
547+
548+ if (currentval == NULL) {
549+ currentval = dbusmenu_defaults_default_get(priv->defaults, menuitem_get_type(mi), property);
550+ }
551+
552+ return currentval;
553 }
554
555 /**
556@@ -1503,10 +1571,23 @@
557
558 /* Checks to see if the value of this property is unique or just the
559 default value. */
560-/* TODO: Implement this */
561 gboolean
562 dbusmenu_menuitem_property_is_default (DbusmenuMenuitem * mi, const gchar * property)
563 {
564- /* No defaults system yet */
565+ g_return_val_if_fail(DBUSMENU_IS_MENUITEM(mi), FALSE);
566+ DbusmenuMenuitemPrivate * priv = DBUSMENU_MENUITEM_GET_PRIVATE(mi);
567+
568+ GVariant * currentval = (GVariant *)g_hash_table_lookup(priv->properties, property);
569+ if (currentval != NULL) {
570+ /* If we're storing it locally, then it shouldn't be a default */
571+ return FALSE;
572+ }
573+
574+ currentval = dbusmenu_defaults_default_get(priv->defaults, menuitem_get_type(mi), property);
575+ if (currentval != NULL) {
576+ return TRUE;
577+ }
578+
579+ g_warn_if_reached();
580 return FALSE;
581 }
582
583=== modified file 'tests/test-gtk-label.json'
584--- tests/test-gtk-label.json 2010-03-18 05:09:14 +0000
585+++ tests/test-gtk-label.json 2011-02-22 04:06:19 +0000
586@@ -45,7 +45,7 @@
587 "label": "value27"},
588 {"id": 28, "type": "standard",
589 "label": "value28"},
590- {"id": 29, "type": "standard", "visible": "false",
591+ {"id": 29, "type": "standard", "visible": false,
592 "label": "value29"}
593 ]
594 },
595@@ -54,45 +54,45 @@
596 "submenu": [
597 {"id": 40,
598 "type": "standard",
599- "enabled": "true",
600+ "enabled": true,
601 "label": "value40"},
602 {"id": 41,
603 "type": "standard",
604- "enabled": "false",
605+ "enabled": false,
606 "label": "value41"},
607 {"id": 42,
608 "type": "standard",
609- "enabled": "true",
610+ "enabled": true,
611 "label": "value42"},
612 {"id": 43,
613 "type": "standard",
614- "enabled": "false",
615+ "enabled": false,
616 "label": "value43"},
617 {"id": 44,
618 "type": "standard",
619- "enabled": "true",
620+ "enabled": true,
621 "label": "value44"},
622 {"id": 45,
623 "type": "standard",
624- "enabled": "false",
625+ "enabled": false,
626 "label": "value45"},
627 {"id": 46,
628 "type": "standard",
629- "enabled": "true",
630+ "enabled": true,
631 "label": "value46"},
632 {"id": 47,
633 "type": "standard",
634- "enabled": "false",
635+ "enabled": false,
636 "label": "value47"},
637 {"id": 48,
638 "type": "standard",
639- "enabled": "true",
640+ "enabled": true,
641 "label": "value48"},
642 {"id": 49,
643 "type": "standard",
644- "visible": "false",
645- "enabled": "false",
646- "label": "value49"}
647+ "visible": false,
648+ "enabled": false,
649+ "label": "value49 - hidden"}
650 ]
651 },
652 {"id": 3, "type": "standard",
653
654=== modified file 'tests/test-json-01.json'
655--- tests/test-json-01.json 2010-12-01 21:48:08 +0000
656+++ tests/test-json-01.json 2011-02-22 04:06:19 +0000
657@@ -5,30 +5,22 @@
658 {
659 "id": 5,
660 "children-display": 'submenu',
661- "enabled": true,
662 "label": 'File',
663- "visible": true,
664 "submenu": [
665 {
666 "id": 6,
667- "enabled": true,
668 "label": 'Quit',
669- "shortcut": [['Control', 'q']],
670- "visible": true
671+ "shortcut": [['Control', 'q']]
672 },
673 {
674 "id": 7,
675- "enabled": true,
676 "label": 'Close all',
677- "shortcut": [['Control', 'Shift', 'w']],
678- "visible": true
679+ "shortcut": [['Control', 'Shift', 'w']]
680 },
681 {
682 "id": 8,
683- "enabled": true,
684 "label": 'Close',
685- "shortcut": [['Control', 'w']],
686- "visible": true
687+ "shortcut": [['Control', 'w']]
688 },
689 {
690 "id": 9,
691@@ -36,22 +28,16 @@
692 },
693 {
694 "id": 10,
695- "enabled": true,
696- "label": 'Send by Email...',
697- "visible": true
698+ "label": 'Send by Email...'
699 },
700 {
701 "id": 11,
702- "enabled": true,
703 "label": 'Print...',
704- "shortcut": [['Control', 'p']],
705- "visible": true
706+ "shortcut": [['Control', 'p']]
707 },
708 {
709 "id": 12,
710- "enabled": true,
711- "label": 'Page Setup',
712- "visible": true
713+ "label": 'Page Setup'
714 },
715 {
716 "id": 13,
717@@ -59,35 +45,25 @@
718 },
719 {
720 "id": 14,
721- "enabled": true,
722- "label": 'Revert',
723- "visible": true
724+ "label": 'Revert'
725 },
726 {
727 "id": 15,
728- "enabled": true,
729- "label": 'Save as Template...',
730- "visible": true
731+ "label": 'Save as Template...'
732 },
733 {
734 "id": 16,
735- "enabled": true,
736- "label": 'Save a Copy...',
737- "visible": true
738+ "label": 'Save a Copy...'
739 },
740 {
741 "id": 17,
742- "enabled": true,
743 "label": 'Save As...',
744- "shortcut": [['Control', 'Shift', 's']],
745- "visible": true
746+ "shortcut": [['Control', 'Shift', 's']]
747 },
748 {
749 "id": 18,
750- "enabled": true,
751 "label": 'Save',
752- "shortcut": [['Control', 's']],
753- "visible": true
754+ "shortcut": [['Control', 's']]
755 },
756 {
757 "id": 19,
758@@ -96,15 +72,11 @@
759 {
760 "id": 20,
761 "children-display": 'submenu',
762- "enabled": true,
763 "label": 'Open Recent',
764- "visible": true,
765 "submenu": [
766 {
767 "id": 21,
768- "enabled": true,
769- "label": 'Document History',
770- "visible": true
771+ "label": 'Document History'
772 },
773 {
774 "id": 22,
775@@ -112,168 +84,118 @@
776 },
777 {
778 "id": 23,
779- "enabled": true,
780 "label": 'giggity.jpg',
781- "shortcut": [['Control', '2']],
782- "visible": true
783+ "shortcut": [['Control', '2']]
784 },
785 {
786 "id": 24,
787- "enabled": true,
788 "label": 'Icon Height.svg',
789- "shortcut": [['Control', '1']],
790- "visible": true
791+ "shortcut": [['Control', '1']]
792 }
793 ]
794 },
795 {
796 "id": 25,
797- "enabled": true,
798- "label": 'Open Location...',
799- "visible": true
800+ "label": 'Open Location...'
801 },
802 {
803 "id": 26,
804- "enabled": true,
805 "label": 'Open as Layers...',
806- "shortcut": [['Control', 'Alt', 'o']],
807- "visible": true
808+ "shortcut": [['Control', 'Alt', 'o']]
809 },
810 {
811 "id": 27,
812- "enabled": true,
813 "label": 'Open...',
814- "shortcut": [['Control', 'o']],
815- "visible": true
816+ "shortcut": [['Control', 'o']]
817 },
818 {
819 "id": 28,
820 "children-display": 'submenu',
821- "enabled": true,
822 "label": 'Create',
823- "visible": true,
824 "submenu": [
825 {
826 "id": 29,
827 "children-display": 'submenu',
828- "enabled": true,
829 "label": 'Web Page Themes',
830- "visible": true,
831 "submenu": [
832 {
833 "id": 30,
834 "children-display": 'submenu',
835- "enabled": true,
836 "label": 'Classic.Gimp.Org',
837- "visible": true,
838 "submenu": [
839 {
840 "id": 31,
841- "enabled": true,
842- "label": 'Tube Sub-Sub-Button Label...',
843- "visible": true
844+ "label": 'Tube Sub-Sub-Button Label...'
845 },
846 {
847 "id": 32,
848- "enabled": true,
849- "label": 'Tube Sub-Button Label...',
850- "visible": true
851+ "label": 'Tube Sub-Button Label...'
852 },
853 {
854 "id": 33,
855- "enabled": true,
856- "label": 'Tube Button Label...',
857- "visible": true
858+ "label": 'Tube Button Label...'
859 },
860 {
861 "id": 34,
862- "enabled": true,
863- "label": 'Small Header...',
864- "visible": true
865+ "label": 'Small Header...'
866 },
867 {
868 "id": 35,
869- "enabled": true,
870- "label": 'General Tube Labels...',
871- "visible": true
872+ "label": 'General Tube Labels...'
873 },
874 {
875 "id": 36,
876- "enabled": true,
877- "label": 'Big Header...',
878- "visible": true
879+ "label": 'Big Header...'
880 }
881 ]
882 },
883 {
884 "id": 37,
885 "children-display": 'submenu',
886- "enabled": true,
887 "label": 'Beveled Pattern',
888- "visible": true,
889 "submenu": [
890 {
891 "id": 38,
892- "enabled": true,
893- "label": 'Hrule...',
894- "visible": true
895+ "label": 'Hrule...'
896 },
897 {
898 "id": 39,
899- "enabled": true,
900- "label": 'Heading...',
901- "visible": true
902+ "label": 'Heading...'
903 },
904 {
905 "id": 40,
906- "enabled": true,
907- "label": 'Button...',
908- "visible": true
909+ "label": 'Button...'
910 },
911 {
912 "id": 41,
913- "enabled": true,
914- "label": 'Bullet...',
915- "visible": true
916+ "label": 'Bullet...'
917 },
918 {
919 "id": 42,
920- "enabled": true,
921- "label": 'Arrow...',
922- "visible": true
923+ "label": 'Arrow...'
924 }
925 ]
926 },
927 {
928 "id": 43,
929 "children-display": 'submenu',
930- "enabled": true,
931 "label": 'Alien Glow',
932- "visible": true,
933 "submenu": [
934 {
935 "id": 44,
936- "enabled": true,
937- "label": 'Hrule...',
938- "visible": true
939+ "label": 'Hrule...'
940 },
941 {
942 "id": 45,
943- "enabled": true,
944- "label": 'Button...',
945- "visible": true
946+ "label": 'Button...'
947 },
948 {
949 "id": 46,
950- "enabled": true,
951- "label": 'Bullet...',
952- "visible": true
953+ "label": 'Bullet...'
954 },
955 {
956 "id": 47,
957- "enabled": true,
958- "label": 'Arrow...',
959- "visible": true
960+ "label": 'Arrow...'
961 }
962 ]
963 }
964@@ -282,255 +204,173 @@
965 {
966 "id": 48,
967 "children-display": 'submenu',
968- "enabled": true,
969 "label": 'Patterns',
970- "visible": true,
971 "submenu": [
972 {
973 "id": 49,
974- "enabled": true,
975- "label": 'Truchet...',
976- "visible": true
977+ "label": 'Truchet...'
978 },
979 {
980 "id": 50,
981- "enabled": true,
982- "label": 'Swirly...',
983- "visible": true
984+ "label": 'Swirly...'
985 },
986 {
987 "id": 51,
988- "enabled": true,
989- "label": 'Swirl-Tile...',
990- "visible": true
991+ "label": 'Swirl-Tile...'
992 },
993 {
994 "id": 52,
995- "enabled": true,
996- "label": 'Render Map...',
997- "visible": true
998+ "label": 'Render Map...'
999 },
1000 {
1001 "id": 53,
1002- "enabled": true,
1003- "label": 'Land...',
1004- "visible": true
1005+ "label": 'Land...'
1006 },
1007 {
1008 "id": 54,
1009- "enabled": true,
1010- "label": 'Flatland...',
1011- "visible": true
1012+ "label": 'Flatland...'
1013 },
1014 {
1015 "id": 55,
1016- "enabled": true,
1017- "label": 'Camouflage...',
1018- "visible": true
1019+ "label": 'Camouflage...'
1020 },
1021 {
1022 "id": 56,
1023- "enabled": true,
1024- "label": '3D Truchet...',
1025- "visible": true
1026+ "label": '3D Truchet...'
1027 }
1028 ]
1029 },
1030 {
1031 "id": 57,
1032 "children-display": 'submenu',
1033- "enabled": true,
1034 "label": 'Logos',
1035- "visible": true,
1036 "submenu": [
1037 {
1038 "id": 58,
1039- "enabled": true,
1040- "label": 'Web Title Header...',
1041- "visible": true
1042+ "label": 'Web Title Header...'
1043 },
1044 {
1045 "id": 59,
1046- "enabled": true,
1047- "label": 'Textured...',
1048- "visible": true
1049+ "label": 'Textured...'
1050 },
1051 {
1052 "id": 60,
1053- "enabled": true,
1054- "label": 'Text Circle...',
1055- "visible": true
1056+ "label": 'Text Circle...'
1057 },
1058 {
1059 "id": 61,
1060- "enabled": true,
1061- "label": 'Starscape...',
1062- "visible": true
1063+ "label": 'Starscape...'
1064 },
1065 {
1066 "id": 62,
1067- "enabled": true,
1068- "label": 'Speed Text...',
1069- "visible": true
1070+ "label": 'Speed Text...'
1071 },
1072 {
1073 "id": 63,
1074- "enabled": true,
1075- "label": 'SOTA Chrome...',
1076- "visible": true
1077+ "label": 'SOTA Chrome...'
1078 },
1079 {
1080 "id": 64,
1081- "enabled": true,
1082- "label": 'Particle Trace...',
1083- "visible": true
1084+ "label": 'Particle Trace...'
1085 },
1086 {
1087 "id": 65,
1088- "enabled": true,
1089- "label": 'Newsprint Text...',
1090- "visible": true
1091+ "label": 'Newsprint Text...'
1092 },
1093 {
1094 "id": 66,
1095- "enabled": true,
1096- "label": 'Neon...',
1097- "visible": true
1098+ "label": 'Neon...'
1099 },
1100 {
1101 "id": 67,
1102- "enabled": true,
1103- "label": 'Imigre-26...',
1104- "visible": true
1105+ "label": 'Imigre-26...'
1106 },
1107 {
1108 "id": 68,
1109- "enabled": true,
1110- "label": 'Gradient Bevel...',
1111- "visible": true
1112+ "label": 'Gradient Bevel...'
1113 },
1114 {
1115 "id": 69,
1116- "enabled": true,
1117- "label": 'Glowing Hot...',
1118- "visible": true
1119+ "label": 'Glowing Hot...'
1120 },
1121 {
1122 "id": 70,
1123- "enabled": true,
1124- "label": 'Glossy...',
1125- "visible": true
1126+ "label": 'Glossy...'
1127 },
1128 {
1129 "id": 71,
1130- "enabled": true,
1131- "label": 'Frosty...',
1132- "visible": true
1133+ "label": 'Frosty...'
1134 },
1135 {
1136 "id": 72,
1137- "enabled": true,
1138- "label": 'Crystal...',
1139- "visible": true
1140+ "label": 'Crystal...'
1141 },
1142 {
1143 "id": 73,
1144- "enabled": true,
1145- "label": 'Cool Metal...',
1146- "visible": true
1147+ "label": 'Cool Metal...'
1148 },
1149 {
1150 "id": 74,
1151- "enabled": true,
1152- "label": 'Comic Book...',
1153- "visible": true
1154+ "label": 'Comic Book...'
1155 },
1156 {
1157 "id": 75,
1158- "enabled": true,
1159- "label": 'Chrome...',
1160- "visible": true
1161+ "label": 'Chrome...'
1162 },
1163 {
1164 "id": 76,
1165- "enabled": true,
1166- "label": 'Chip Away...',
1167- "visible": true
1168+ "label": 'Chip Away...'
1169 },
1170 {
1171 "id": 77,
1172- "enabled": true,
1173- "label": 'Chalk...',
1174- "visible": true
1175+ "label": 'Chalk...'
1176 },
1177 {
1178 "id": 78,
1179- "enabled": true,
1180- "label": 'Carved...',
1181- "visible": true
1182+ "label": 'Carved...'
1183 },
1184 {
1185 "id": 79,
1186- "enabled": true,
1187- "label": 'Bovination...',
1188- "visible": true
1189+ "label": 'Bovination...'
1190 },
1191 {
1192 "id": 80,
1193- "enabled": true,
1194- "label": 'Blended...',
1195- "visible": true
1196+ "label": 'Blended...'
1197 },
1198 {
1199 "id": 81,
1200- "enabled": true,
1201- "label": 'Basic I...',
1202- "visible": true
1203+ "label": 'Basic I...'
1204 },
1205 {
1206 "id": 82,
1207- "enabled": true,
1208- "label": 'Basic II...',
1209- "visible": true
1210+ "label": 'Basic II...'
1211 },
1212 {
1213 "id": 83,
1214- "enabled": true,
1215- "label": 'Alien Neon...',
1216- "visible": true
1217+ "label": 'Alien Neon...'
1218 },
1219 {
1220 "id": 84,
1221- "enabled": true,
1222- "label": 'Alien Glow...',
1223- "visible": true
1224+ "label": 'Alien Glow...'
1225 },
1226 {
1227 "id": 85,
1228- "enabled": true,
1229- "label": '3D Outline...',
1230- "visible": true
1231+ "label": '3D Outline...'
1232 }
1233 ]
1234 },
1235 {
1236 "id": 86,
1237 "children-display": 'submenu',
1238- "enabled": true,
1239 "label": 'Buttons',
1240- "visible": true,
1241 "submenu": [
1242 {
1243 "id": 87,
1244- "enabled": true,
1245- "label": 'Simple Beveled Button...',
1246- "visible": true
1247+ "label": 'Simple Beveled Button...'
1248 },
1249 {
1250 "id": 88,
1251- "enabled": true,
1252- "label": 'Round Button...',
1253- "visible": true
1254+ "label": 'Round Button...'
1255 }
1256 ]
1257 },
1258@@ -541,72 +381,53 @@
1259 {
1260 "id": 90,
1261 "children-display": 'submenu',
1262- "enabled": true,
1263 "label": 'xscanimage',
1264- "visible": true,
1265 "submenu": [
1266 {
1267 "id": 91,
1268 "enabled": false,
1269- "label": 'Device dialog...',
1270- "visible": true
1271+ "label": 'Device dialog...'
1272 }
1273 ]
1274 },
1275 {
1276 "id": 92,
1277- "enabled": true,
1278- "label": 'Screenshot...',
1279- "visible": true
1280+ "label": 'Screenshot...'
1281 },
1282 {
1283 "id": 93,
1284- "enabled": true,
1285 "label": 'From Clipboard',
1286- "shortcut": [['Control', 'Shift', 'v']],
1287- "visible": true
1288+ "shortcut": [['Control', 'Shift', 'v']]
1289 }
1290 ]
1291 },
1292 {
1293 "id": 94,
1294- "enabled": true,
1295 "label": 'New...',
1296- "shortcut": [['Control', 'n']],
1297- "visible": true
1298+ "shortcut": [['Control', 'n']]
1299 }
1300 ]
1301 },
1302 {
1303 "id": 95,
1304 "children-display": 'submenu',
1305- "enabled": true,
1306 "label": 'Edit',
1307- "visible": true,
1308 "submenu": [
1309 {
1310 "id": 96,
1311- "enabled": true,
1312- "label": 'Units',
1313- "visible": true
1314+ "label": 'Units'
1315 },
1316 {
1317 "id": 97,
1318- "enabled": true,
1319- "label": 'Modules',
1320- "visible": true
1321+ "label": 'Modules'
1322 },
1323 {
1324 "id": 98,
1325- "enabled": true,
1326- "label": 'Keyboard Shortcuts',
1327- "visible": true
1328+ "label": 'Keyboard Shortcuts'
1329 },
1330 {
1331 "id": 99,
1332- "enabled": true,
1333- "label": 'Preferences',
1334- "visible": true
1335+ "label": 'Preferences'
1336 },
1337 {
1338 "id": 100,
1339@@ -615,42 +436,32 @@
1340 {
1341 "id": 101,
1342 "enabled": false,
1343- "label": 'Stroke Path...',
1344- "visible": true
1345+ "label": 'Stroke Path...'
1346 },
1347 {
1348 "id": 102,
1349 "enabled": false,
1350- "label": 'Stroke Selection...',
1351- "visible": true
1352+ "label": 'Stroke Selection...'
1353 },
1354 {
1355 "id": 103,
1356- "enabled": true,
1357 "label": 'Fill with Pattern',
1358- "shortcut": [['Control', 'semicolon']],
1359- "visible": true
1360+ "shortcut": [['Control', 'semicolon']]
1361 },
1362 {
1363 "id": 104,
1364- "enabled": true,
1365 "label": 'Fill with BG Color',
1366- "shortcut": [['Control', 'period']],
1367- "visible": true
1368+ "shortcut": [['Control', 'period']]
1369 },
1370 {
1371 "id": 105,
1372- "enabled": true,
1373 "label": 'Fill with FG Color',
1374- "shortcut": [['Control', 'comma']],
1375- "visible": true
1376+ "shortcut": [['Control', 'comma']]
1377 },
1378 {
1379 "id": 106,
1380- "enabled": true,
1381 "label": 'Clear',
1382- "shortcut": [['Delete']],
1383- "visible": true
1384+ "shortcut": [['Delete']]
1385 },
1386 {
1387 "id": 107,
1388@@ -659,103 +470,73 @@
1389 {
1390 "id": 108,
1391 "children-display": 'submenu',
1392- "enabled": true,
1393 "label": 'Buffer',
1394- "visible": true,
1395 "submenu": [
1396 {
1397 "id": 109,
1398- "enabled": true,
1399- "label": 'Paste Named...',
1400- "visible": true
1401+ "label": 'Paste Named...'
1402 },
1403 {
1404 "id": 110,
1405- "enabled": true,
1406- "label": 'Copy Visible Named...',
1407- "visible": true
1408+ "label": 'Copy Visible Named...'
1409 },
1410 {
1411 "id": 111,
1412- "enabled": true,
1413- "label": 'Copy Named...',
1414- "visible": true
1415+ "label": 'Copy Named...'
1416 },
1417 {
1418 "id": 112,
1419- "enabled": true,
1420- "label": 'Cut Named...',
1421- "visible": true
1422+ "label": 'Cut Named...'
1423 }
1424 ]
1425 },
1426 {
1427 "id": 113,
1428 "children-display": 'submenu',
1429- "enabled": true,
1430 "label": 'Paste as',
1431- "visible": true,
1432 "submenu": [
1433 {
1434 "id": 114,
1435- "enabled": true,
1436- "label": 'New Pattern...',
1437- "visible": true
1438+ "label": 'New Pattern...'
1439 },
1440 {
1441 "id": 115,
1442- "enabled": true,
1443- "label": 'New Brush...',
1444- "visible": true
1445+ "label": 'New Brush...'
1446 },
1447 {
1448 "id": 116,
1449- "enabled": true,
1450- "label": 'New Layer',
1451- "visible": true
1452+ "label": 'New Layer'
1453 },
1454 {
1455 "id": 117,
1456- "enabled": true,
1457 "label": 'New Image',
1458- "shortcut": [['Control', 'Shift', 'v']],
1459- "visible": true
1460+ "shortcut": [['Control', 'Shift', 'v']]
1461 }
1462 ]
1463 },
1464 {
1465 "id": 118,
1466- "enabled": true,
1467- "label": 'Paste Into',
1468- "visible": true
1469+ "label": 'Paste Into'
1470 },
1471 {
1472 "id": 119,
1473- "enabled": true,
1474 "label": 'Paste',
1475- "shortcut": [['Control', 'v']],
1476- "visible": true
1477+ "shortcut": [['Control', 'v']]
1478 },
1479 {
1480 "id": 120,
1481- "enabled": true,
1482 "label": 'Copy Visible',
1483- "shortcut": [['Control', 'Shift', 'c']],
1484- "visible": true
1485+ "shortcut": [['Control', 'Shift', 'c']]
1486 },
1487 {
1488 "id": 121,
1489- "enabled": true,
1490 "label": 'Copy',
1491- "shortcut": [['Control', 'c']],
1492- "visible": true
1493+ "shortcut": [['Control', 'c']]
1494 },
1495 {
1496 "id": 122,
1497- "enabled": true,
1498 "label": 'Cut',
1499- "shortcut": [['Control', 'x']],
1500- "visible": true
1501+ "shortcut": [['Control', 'x']]
1502 },
1503 {
1504 "id": 123,
1505@@ -763,59 +544,47 @@
1506 },
1507 {
1508 "id": 124,
1509- "enabled": true,
1510- "label": 'Undo History',
1511- "visible": true
1512+ "label": 'Undo History'
1513 },
1514 {
1515 "id": 3,
1516 "enabled": false,
1517- "label": '_Fade...',
1518- "visible": true
1519+ "label": '_Fade...'
1520 },
1521 {
1522 "id": 2,
1523 "enabled": false,
1524 "label": '_Redo',
1525- "shortcut": [['Control', 'y']],
1526- "visible": true
1527+ "shortcut": [['Control', 'y']]
1528 },
1529 {
1530 "id": 1,
1531 "enabled": false,
1532 "label": '_Undo',
1533- "shortcut": [['Control', 'z']],
1534- "visible": true
1535+ "shortcut": [['Control', 'z']]
1536 }
1537 ]
1538 },
1539 {
1540 "id": 125,
1541 "children-display": 'submenu',
1542- "enabled": true,
1543 "label": 'Select',
1544- "visible": true,
1545 "submenu": [
1546 {
1547 "id": 126,
1548 "enabled": false,
1549- "label": 'To Path',
1550- "visible": true
1551+ "label": 'To Path'
1552 },
1553 {
1554 "id": 127,
1555- "enabled": true,
1556- "label": 'Save to Channel',
1557- "visible": true
1558+ "label": 'Save to Channel'
1559 },
1560 {
1561 "id": 128,
1562- "enabled": true,
1563 "label": 'Toggle Quick Mask',
1564 "shortcut": [['Shift', 'q']],
1565 "toggle-state": 0,
1566- "toggle-type": 'checkmark',
1567- "visible": true
1568+ "toggle-type": 'checkmark'
1569 },
1570 {
1571 "id": 129,
1572@@ -823,39 +592,32 @@
1573 },
1574 {
1575 "id": 130,
1576- "enabled": true,
1577- "label": 'Distort...',
1578- "visible": true
1579+ "label": 'Distort...'
1580 },
1581 {
1582 "id": 131,
1583 "enabled": false,
1584- "label": 'Border...',
1585- "visible": true
1586+ "label": 'Border...'
1587 },
1588 {
1589 "id": 132,
1590 "enabled": false,
1591- "label": 'Grow...',
1592- "visible": true
1593+ "label": 'Grow...'
1594 },
1595 {
1596 "id": 133,
1597 "enabled": false,
1598- "label": 'Shrink...',
1599- "visible": true
1600+ "label": 'Shrink...'
1601 },
1602 {
1603 "id": 134,
1604 "enabled": false,
1605- "label": 'Sharpen',
1606- "visible": true
1607+ "label": 'Sharpen'
1608 },
1609 {
1610 "id": 135,
1611 "enabled": false,
1612- "label": 'Feather...',
1613- "visible": true
1614+ "label": 'Feather...'
1615 },
1616 {
1617 "id": 136,
1618@@ -863,106 +625,81 @@
1619 },
1620 {
1621 "id": 137,
1622- "enabled": true,
1623- "label": 'Selection Editor',
1624- "visible": true
1625+ "label": 'Selection Editor'
1626 },
1627 {
1628 "id": 138,
1629 "enabled": false,
1630 "label": 'From Path',
1631- "shortcut": [['Shift', 'v']],
1632- "visible": true
1633+ "shortcut": [['Shift', 'v']]
1634 },
1635 {
1636 "id": 139,
1637- "enabled": true,
1638 "label": 'By Color',
1639- "shortcut": [['Shift', 'o']],
1640- "visible": true
1641+ "shortcut": [['Shift', 'o']]
1642 },
1643 {
1644 "id": 140,
1645 "enabled": false,
1646 "label": 'Float',
1647- "shortcut": [['Control', 'Shift', 'l']],
1648- "visible": true
1649+ "shortcut": [['Control', 'Shift', 'l']]
1650 },
1651 {
1652 "id": 141,
1653- "enabled": true,
1654 "label": 'Invert',
1655- "shortcut": [['Control', 'i']],
1656- "visible": true
1657+ "shortcut": [['Control', 'i']]
1658 },
1659 {
1660 "id": 142,
1661 "enabled": false,
1662 "label": 'None',
1663- "shortcut": [['Control', 'Shift', 'a']],
1664- "visible": true
1665+ "shortcut": [['Control', 'Shift', 'a']]
1666 },
1667 {
1668 "id": 143,
1669- "enabled": true,
1670 "label": 'All',
1671- "shortcut": [['Control', 'a']],
1672- "visible": true
1673+ "shortcut": [['Control', 'a']]
1674 }
1675 ]
1676 },
1677 {
1678 "id": 144,
1679 "children-display": 'submenu',
1680- "enabled": true,
1681 "label": 'View',
1682- "visible": true,
1683 "submenu": [
1684 {
1685 "id": 145,
1686- "enabled": true,
1687 "label": 'Show Statusbar',
1688 "toggle-state": 1,
1689- "toggle-type": 'checkmark',
1690- "visible": true
1691+ "toggle-type": 'checkmark'
1692 },
1693 {
1694 "id": 146,
1695- "enabled": true,
1696 "label": 'Show Scrollbars',
1697 "toggle-state": 0,
1698- "toggle-type": 'checkmark',
1699- "visible": true
1700+ "toggle-type": 'checkmark'
1701 },
1702 {
1703 "id": 147,
1704- "enabled": true,
1705 "label": 'Show Rulers',
1706 "shortcut": [['Control', 'Shift', 'r']],
1707 "toggle-state": 0,
1708- "toggle-type": 'checkmark',
1709- "visible": true
1710+ "toggle-type": 'checkmark'
1711 },
1712 {
1713 "id": 148,
1714- "enabled": true,
1715 "label": 'Show Menubar',
1716 "toggle-state": 1,
1717- "toggle-type": 'checkmark',
1718- "visible": true
1719+ "toggle-type": 'checkmark'
1720 },
1721 {
1722 "id": 149,
1723 "children-display": 'submenu',
1724- "enabled": true,
1725 "label": 'Padding Color',
1726- "visible": true,
1727 "submenu": [
1728 {
1729 "id": 150,
1730- "enabled": true,
1731- "label": 'As in Preferences',
1732- "visible": true
1733+ "label": 'As in Preferences'
1734 },
1735 {
1736 "id": 151,
1737@@ -970,27 +707,19 @@
1738 },
1739 {
1740 "id": 152,
1741- "enabled": true,
1742- "label": 'Select Custom Color...',
1743- "visible": true
1744+ "label": 'Select Custom Color...'
1745 },
1746 {
1747 "id": 153,
1748- "enabled": true,
1749- "label": 'Dark Check Color',
1750- "visible": true
1751+ "label": 'Dark Check Color'
1752 },
1753 {
1754 "id": 154,
1755- "enabled": true,
1756- "label": 'Light Check Color',
1757- "visible": true
1758+ "label": 'Light Check Color'
1759 },
1760 {
1761 "id": 155,
1762- "enabled": true,
1763- "label": 'From Theme',
1764- "visible": true
1765+ "label": 'From Theme'
1766 }
1767 ]
1768 },
1769@@ -1000,35 +729,27 @@
1770 },
1771 {
1772 "id": 157,
1773- "enabled": true,
1774 "label": 'Snap to Active Path',
1775 "toggle-state": 0,
1776- "toggle-type": 'checkmark',
1777- "visible": true
1778+ "toggle-type": 'checkmark'
1779 },
1780 {
1781 "id": 158,
1782- "enabled": true,
1783 "label": 'Snap to Canvas Edges',
1784 "toggle-state": 0,
1785- "toggle-type": 'checkmark',
1786- "visible": true
1787+ "toggle-type": 'checkmark'
1788 },
1789 {
1790 "id": 159,
1791- "enabled": true,
1792 "label": 'Snap to Grid',
1793 "toggle-state": 0,
1794- "toggle-type": 'checkmark',
1795- "visible": true
1796+ "toggle-type": 'checkmark'
1797 },
1798 {
1799 "id": 160,
1800- "enabled": true,
1801 "label": 'Snap to Guides',
1802 "toggle-state": 1,
1803- "toggle-type": 'checkmark',
1804- "visible": true
1805+ "toggle-type": 'checkmark'
1806 },
1807 {
1808 "id": 161,
1809@@ -1036,45 +757,35 @@
1810 },
1811 {
1812 "id": 162,
1813- "enabled": true,
1814 "label": 'Show Sample Points',
1815 "toggle-state": 0,
1816- "toggle-type": 'checkmark',
1817- "visible": true
1818+ "toggle-type": 'checkmark'
1819 },
1820 {
1821 "id": 163,
1822- "enabled": true,
1823 "label": 'Show Grid',
1824 "toggle-state": 0,
1825- "toggle-type": 'checkmark',
1826- "visible": true
1827+ "toggle-type": 'checkmark'
1828 },
1829 {
1830 "id": 164,
1831- "enabled": true,
1832 "label": 'Show Guides',
1833 "shortcut": [['Control', 'Shift', 't']],
1834 "toggle-state": 0,
1835- "toggle-type": 'checkmark',
1836- "visible": true
1837+ "toggle-type": 'checkmark'
1838 },
1839 {
1840 "id": 165,
1841- "enabled": true,
1842 "label": 'Show Layer Boundary',
1843 "toggle-state": 0,
1844- "toggle-type": 'checkmark',
1845- "visible": true
1846+ "toggle-type": 'checkmark'
1847 },
1848 {
1849 "id": 166,
1850- "enabled": true,
1851 "label": 'Show Selection',
1852 "shortcut": [['Control', 't']],
1853 "toggle-state": 0,
1854- "toggle-type": 'checkmark',
1855- "visible": true
1856+ "toggle-type": 'checkmark'
1857 },
1858 {
1859 "id": 167,
1860@@ -1082,15 +793,11 @@
1861 },
1862 {
1863 "id": 168,
1864- "enabled": true,
1865- "label": 'Display Filters...',
1866- "visible": true
1867+ "label": 'Display Filters...'
1868 },
1869 {
1870 "id": 169,
1871- "enabled": true,
1872- "label": 'Navigation Window',
1873- "visible": true
1874+ "label": 'Navigation Window'
1875 },
1876 {
1877 "id": 170,
1878@@ -1099,27 +806,21 @@
1879 {
1880 "id": 171,
1881 "children-display": 'submenu',
1882- "enabled": true,
1883 "label": 'Fullscreen',
1884 "shortcut": [['F11']],
1885 "toggle-state": 0,
1886 "toggle-type": 'checkmark',
1887- "visible": true,
1888 "submenu": [
1889 {
1890 "id": 172,
1891- "enabled": true,
1892- "label": 'Open Display...',
1893- "visible": true
1894+ "label": 'Open Display...'
1895 }
1896 ]
1897 },
1898 {
1899 "id": 173,
1900- "enabled": true,
1901 "label": 'Shrink Wrap',
1902- "shortcut": [['Control', 'e']],
1903- "visible": true
1904+ "shortcut": [['Control', 'e']]
1905 },
1906 {
1907 "id": 174,
1908@@ -1128,17 +829,13 @@
1909 {
1910 "id": 175,
1911 "children-display": 'submenu',
1912- "enabled": true,
1913 "label": '_Zoom (67%)',
1914- "visible": true,
1915 "submenu": [
1916 {
1917 "id": 176,
1918- "enabled": true,
1919 "label": 'Othe_r (67%)...',
1920 "toggle-state": 0,
1921- "toggle-type": 'checkmark',
1922- "visible": true
1923+ "toggle-type": 'checkmark'
1924 },
1925 {
1926 "id": 177,
1927@@ -1146,76 +843,58 @@
1928 },
1929 {
1930 "id": 178,
1931- "enabled": true,
1932 "label": '1:16 (6.25%)',
1933 "toggle-state": 0,
1934- "toggle-type": 'checkmark',
1935- "visible": true
1936+ "toggle-type": 'checkmark'
1937 },
1938 {
1939 "id": 179,
1940- "enabled": true,
1941 "label": '1:8 (12.5%)',
1942 "toggle-state": 0,
1943- "toggle-type": 'checkmark',
1944- "visible": true
1945+ "toggle-type": 'checkmark'
1946 },
1947 {
1948 "id": 180,
1949- "enabled": true,
1950 "label": '1:4 (25%)',
1951 "toggle-state": 0,
1952- "toggle-type": 'checkmark',
1953- "visible": true
1954+ "toggle-type": 'checkmark'
1955 },
1956 {
1957 "id": 181,
1958- "enabled": true,
1959 "label": '1:2 (50%)',
1960 "toggle-state": 0,
1961- "toggle-type": 'checkmark',
1962- "visible": true
1963+ "toggle-type": 'checkmark'
1964 },
1965 {
1966 "id": 182,
1967- "enabled": true,
1968 "label": '1:1 (100%)',
1969 "shortcut": [['1']],
1970 "toggle-state": 1,
1971- "toggle-type": 'checkmark',
1972- "visible": true
1973+ "toggle-type": 'checkmark'
1974 },
1975 {
1976 "id": 183,
1977- "enabled": true,
1978 "label": '2:1 (200%)',
1979 "toggle-state": 0,
1980- "toggle-type": 'checkmark',
1981- "visible": true
1982+ "toggle-type": 'checkmark'
1983 },
1984 {
1985 "id": 184,
1986- "enabled": true,
1987 "label": '4:1 (400%)',
1988 "toggle-state": 0,
1989- "toggle-type": 'checkmark',
1990- "visible": true
1991+ "toggle-type": 'checkmark'
1992 },
1993 {
1994 "id": 185,
1995- "enabled": true,
1996 "label": '8:1 (800%)',
1997 "toggle-state": 0,
1998- "toggle-type": 'checkmark',
1999- "visible": true
2000+ "toggle-type": 'checkmark'
2001 },
2002 {
2003 "id": 186,
2004- "enabled": true,
2005 "label": '16:1 (1600%)',
2006 "toggle-state": 0,
2007- "toggle-type": 'checkmark',
2008- "visible": true
2009+ "toggle-type": 'checkmark'
2010 },
2011 {
2012 "id": 187,
2013@@ -1223,106 +902,76 @@
2014 },
2015 {
2016 "id": 188,
2017- "enabled": true,
2018- "label": 'Fill Window',
2019- "visible": true
2020+ "label": 'Fill Window'
2021 },
2022 {
2023 "id": 189,
2024- "enabled": true,
2025 "label": 'Fit Image in Window',
2026- "shortcut": [['Control', 'Shift', 'e']],
2027- "visible": true
2028+ "shortcut": [['Control', 'Shift', 'e']]
2029 },
2030 {
2031 "id": 190,
2032- "enabled": true,
2033 "label": 'Zoom In',
2034- "shortcut": [['plus']],
2035- "visible": true
2036+ "shortcut": [['plus']]
2037 },
2038 {
2039 "id": 191,
2040- "enabled": true,
2041 "label": 'Zoom Out',
2042- "shortcut": [['minus']],
2043- "visible": true
2044+ "shortcut": [['minus']]
2045 },
2046 {
2047 "id": 4,
2048- "enabled": true,
2049 "label": 'Re_vert Zoom (67%)',
2050- "shortcut": [['grave']],
2051- "visible": true
2052+ "shortcut": [['grave']]
2053 }
2054 ]
2055 },
2056 {
2057 "id": 192,
2058- "enabled": true,
2059 "label": 'Dot for Dot',
2060 "toggle-state": 1,
2061- "toggle-type": 'checkmark',
2062- "visible": true
2063+ "toggle-type": 'checkmark'
2064 },
2065 {
2066 "id": 193,
2067- "enabled": true,
2068- "label": 'New View',
2069- "visible": true
2070+ "label": 'New View'
2071 }
2072 ]
2073 },
2074 {
2075 "id": 194,
2076 "children-display": 'submenu',
2077- "enabled": true,
2078 "label": 'Image',
2079- "visible": true,
2080 "submenu": [
2081 {
2082 "id": 195,
2083- "enabled": true,
2084 "label": 'Image Properties',
2085- "shortcut": [['Alt', 'Return']],
2086- "visible": true
2087+ "shortcut": [['Alt', 'Return']]
2088 },
2089 {
2090 "id": 196,
2091- "enabled": true,
2092- "label": 'Configure Grid...',
2093- "visible": true
2094+ "label": 'Configure Grid...'
2095 },
2096 {
2097 "id": 197,
2098 "children-display": 'submenu',
2099- "enabled": true,
2100 "label": 'Guides',
2101- "visible": true,
2102 "submenu": [
2103 {
2104 "id": 198,
2105- "enabled": true,
2106- "label": 'Remove all Guides',
2107- "visible": true
2108+ "label": 'Remove all Guides'
2109 },
2110 {
2111 "id": 199,
2112- "enabled": true,
2113- "label": 'New Guides from Selection',
2114- "visible": true
2115+ "label": 'New Guides from Selection'
2116 },
2117 {
2118 "id": 200,
2119- "enabled": true,
2120- "label": 'New Guide...',
2121- "visible": true
2122+ "label": 'New Guide...'
2123 },
2124 {
2125 "id": 201,
2126- "enabled": true,
2127- "label": 'New Guide (by Percent)...',
2128- "visible": true
2129+ "label": 'New Guide (by Percent)...'
2130 }
2131 ]
2132 },
2133@@ -1332,22 +981,16 @@
2134 },
2135 {
2136 "id": 203,
2137- "enabled": true,
2138- "label": 'Align Visible Layers...',
2139- "visible": true
2140+ "label": 'Align Visible Layers...'
2141 },
2142 {
2143 "id": 204,
2144- "enabled": true,
2145- "label": 'Flatten Image',
2146- "visible": true
2147+ "label": 'Flatten Image'
2148 },
2149 {
2150 "id": 205,
2151- "enabled": true,
2152 "label": 'Merge Visible Layers...',
2153- "shortcut": [['Control', 'm']],
2154- "visible": true
2155+ "shortcut": [['Control', 'm']]
2156 },
2157 {
2158 "id": 206,
2159@@ -1355,21 +998,16 @@
2160 },
2161 {
2162 "id": 207,
2163- "enabled": true,
2164- "label": 'Zealous Crop',
2165- "visible": true
2166+ "label": 'Zealous Crop'
2167 },
2168 {
2169 "id": 208,
2170- "enabled": true,
2171- "label": 'Autocrop Image',
2172- "visible": true
2173+ "label": 'Autocrop Image'
2174 },
2175 {
2176 "id": 209,
2177 "enabled": false,
2178- "label": 'Crop to Selection',
2179- "visible": true
2180+ "label": 'Crop to Selection'
2181 },
2182 {
2183 "id": 210,
2184@@ -1377,33 +1015,24 @@
2185 },
2186 {
2187 "id": 211,
2188- "enabled": true,
2189- "label": 'Scale Image...',
2190- "visible": true
2191+ "label": 'Scale Image...'
2192 },
2193 {
2194 "id": 212,
2195- "enabled": true,
2196- "label": 'Print Size...',
2197- "visible": true
2198+ "label": 'Print Size...'
2199 },
2200 {
2201 "id": 213,
2202 "enabled": false,
2203- "label": 'Fit Canvas to Selection',
2204- "visible": true
2205+ "label": 'Fit Canvas to Selection'
2206 },
2207 {
2208 "id": 214,
2209- "enabled": true,
2210- "label": 'Fit Canvas to Layers',
2211- "visible": true
2212+ "label": 'Fit Canvas to Layers'
2213 },
2214 {
2215 "id": 215,
2216- "enabled": true,
2217- "label": 'Canvas Size...',
2218- "visible": true
2219+ "label": 'Canvas Size...'
2220 },
2221 {
2222 "id": 216,
2223@@ -1412,15 +1041,11 @@
2224 {
2225 "id": 217,
2226 "children-display": 'submenu',
2227- "enabled": true,
2228 "label": 'Transform',
2229- "visible": true,
2230 "submenu": [
2231 {
2232 "id": 218,
2233- "enabled": true,
2234- "label": 'Guillotine',
2235- "visible": true
2236+ "label": 'Guillotine'
2237 },
2238 {
2239 "id": 219,
2240@@ -1428,21 +1053,15 @@
2241 },
2242 {
2243 "id": 220,
2244- "enabled": true,
2245- "label": 'Rotate 180?',
2246- "visible": true
2247+ "label": 'Rotate 180?'
2248 },
2249 {
2250 "id": 221,
2251- "enabled": true,
2252- "label": 'Rotate 90? counter-clockwise',
2253- "visible": true
2254+ "label": 'Rotate 90? counter-clockwise'
2255 },
2256 {
2257 "id": 222,
2258- "enabled": true,
2259- "label": 'Rotate 90? clockwise',
2260- "visible": true
2261+ "label": 'Rotate 90? clockwise'
2262 },
2263 {
2264 "id": 223,
2265@@ -1450,36 +1069,26 @@
2266 },
2267 {
2268 "id": 224,
2269- "enabled": true,
2270- "label": 'Flip Vertically',
2271- "visible": true
2272+ "label": 'Flip Vertically'
2273 },
2274 {
2275 "id": 225,
2276- "enabled": true,
2277- "label": 'Flip Horizontally',
2278- "visible": true
2279+ "label": 'Flip Horizontally'
2280 }
2281 ]
2282 },
2283 {
2284 "id": 226,
2285 "children-display": 'submenu',
2286- "enabled": true,
2287 "label": 'Mode',
2288- "visible": true,
2289 "submenu": [
2290 {
2291 "id": 227,
2292- "enabled": true,
2293- "label": 'Convert to Color Profile...',
2294- "visible": true
2295+ "label": 'Convert to Color Profile...'
2296 },
2297 {
2298 "id": 228,
2299- "enabled": true,
2300- "label": 'Assign Color Profile...',
2301- "visible": true
2302+ "label": 'Assign Color Profile...'
2303 },
2304 {
2305 "id": 229,
2306@@ -1487,75 +1096,56 @@
2307 },
2308 {
2309 "id": 230,
2310- "enabled": true,
2311 "label": 'Indexed...',
2312 "toggle-state": 0,
2313- "toggle-type": 'checkmark',
2314- "visible": true
2315+ "toggle-type": 'checkmark'
2316 },
2317 {
2318 "id": 231,
2319- "enabled": true,
2320 "label": 'Grayscale',
2321 "toggle-state": 0,
2322- "toggle-type": 'checkmark',
2323- "visible": true
2324+ "toggle-type": 'checkmark'
2325 },
2326 {
2327 "id": 232,
2328- "enabled": true,
2329 "label": 'RGB',
2330 "toggle-state": 1,
2331- "toggle-type": 'checkmark',
2332- "visible": true
2333+ "toggle-type": 'checkmark'
2334 }
2335 ]
2336 },
2337 {
2338 "id": 233,
2339- "enabled": true,
2340 "label": 'Duplicate',
2341- "shortcut": [['Control', 'd']],
2342- "visible": true
2343+ "shortcut": [['Control', 'd']]
2344 }
2345 ]
2346 },
2347 {
2348 "id": 234,
2349 "children-display": 'submenu',
2350- "enabled": true,
2351 "label": 'Layer',
2352- "visible": true,
2353 "submenu": [
2354 {
2355 "id": 235,
2356- "enabled": true,
2357- "label": 'Autocrop Layer',
2358- "visible": true
2359+ "label": 'Autocrop Layer'
2360 },
2361 {
2362 "id": 236,
2363 "enabled": false,
2364- "label": 'Crop to Selection',
2365- "visible": true
2366+ "label": 'Crop to Selection'
2367 },
2368 {
2369 "id": 237,
2370- "enabled": true,
2371- "label": 'Scale Layer...',
2372- "visible": true
2373+ "label": 'Scale Layer...'
2374 },
2375 {
2376 "id": 238,
2377- "enabled": true,
2378- "label": 'Layer to Image Size',
2379- "visible": true
2380+ "label": 'Layer to Image Size'
2381 },
2382 {
2383 "id": 239,
2384- "enabled": true,
2385- "label": 'Layer Boundary Size...',
2386- "visible": true
2387+ "label": 'Layer Boundary Size...'
2388 },
2389 {
2390 "id": 240,
2391@@ -1564,16 +1154,12 @@
2392 {
2393 "id": 241,
2394 "children-display": 'submenu',
2395- "enabled": true,
2396 "label": 'Transform',
2397- "visible": true,
2398 "submenu": [
2399 {
2400 "id": 242,
2401- "enabled": true,
2402 "label": 'Offset...',
2403- "shortcut": [['Control', 'Shift', 'o']],
2404- "visible": true
2405+ "shortcut": [['Control', 'Shift', 'o']]
2406 },
2407 {
2408 "id": 243,
2409@@ -1581,27 +1167,19 @@
2410 },
2411 {
2412 "id": 244,
2413- "enabled": true,
2414- "label": 'Arbitrary Rotation...',
2415- "visible": true
2416+ "label": 'Arbitrary Rotation...'
2417 },
2418 {
2419 "id": 245,
2420- "enabled": true,
2421- "label": 'Rotate 180?',
2422- "visible": true
2423+ "label": 'Rotate 180?'
2424 },
2425 {
2426 "id": 246,
2427- "enabled": true,
2428- "label": 'Rotate 90? counter-clockwise',
2429- "visible": true
2430+ "label": 'Rotate 90? counter-clockwise'
2431 },
2432 {
2433 "id": 247,
2434- "enabled": true,
2435- "label": 'Rotate 90? clockwise',
2436- "visible": true
2437+ "label": 'Rotate 90? clockwise'
2438 },
2439 {
2440 "id": 248,
2441@@ -1609,48 +1187,34 @@
2442 },
2443 {
2444 "id": 249,
2445- "enabled": true,
2446- "label": 'Flip Vertically',
2447- "visible": true
2448+ "label": 'Flip Vertically'
2449 },
2450 {
2451 "id": 250,
2452- "enabled": true,
2453- "label": 'Flip Horizontally',
2454- "visible": true
2455+ "label": 'Flip Horizontally'
2456 }
2457 ]
2458 },
2459 {
2460 "id": 251,
2461 "children-display": 'submenu',
2462- "enabled": true,
2463 "label": 'Transparency',
2464- "visible": true,
2465 "submenu": [
2466 {
2467 "id": 252,
2468- "enabled": true,
2469- "label": 'Intersect with Selection',
2470- "visible": true
2471+ "label": 'Intersect with Selection'
2472 },
2473 {
2474 "id": 253,
2475- "enabled": true,
2476- "label": 'Subtract from Selection',
2477- "visible": true
2478+ "label": 'Subtract from Selection'
2479 },
2480 {
2481 "id": 254,
2482- "enabled": true,
2483- "label": 'Add to Selection',
2484- "visible": true
2485+ "label": 'Add to Selection'
2486 },
2487 {
2488 "id": 255,
2489- "enabled": true,
2490- "label": 'Alpha to Selection',
2491- "visible": true
2492+ "label": 'Alpha to Selection'
2493 },
2494 {
2495 "id": 256,
2496@@ -1658,66 +1222,51 @@
2497 },
2498 {
2499 "id": 257,
2500- "enabled": true,
2501- "label": 'Threshold Alpha...',
2502- "visible": true
2503+ "label": 'Threshold Alpha...'
2504 },
2505 {
2506 "id": 258,
2507- "enabled": true,
2508- "label": 'Semi-Flatten',
2509- "visible": true
2510+ "label": 'Semi-Flatten'
2511 },
2512 {
2513 "id": 259,
2514- "enabled": true,
2515- "label": 'Color to Alpha...',
2516- "visible": true
2517+ "label": 'Color to Alpha...'
2518 },
2519 {
2520 "id": 260,
2521- "enabled": true,
2522- "label": 'Remove Alpha Channel',
2523- "visible": true
2524+ "label": 'Remove Alpha Channel'
2525 },
2526 {
2527 "id": 261,
2528 "enabled": false,
2529- "label": 'Add Alpha Channel',
2530- "visible": true
2531+ "label": 'Add Alpha Channel'
2532 }
2533 ]
2534 },
2535 {
2536 "id": 262,
2537 "children-display": 'submenu',
2538- "enabled": true,
2539 "label": 'Mask',
2540- "visible": true,
2541 "submenu": [
2542 {
2543 "id": 263,
2544 "enabled": false,
2545- "label": 'Intersect with Selection',
2546- "visible": true
2547+ "label": 'Intersect with Selection'
2548 },
2549 {
2550 "id": 264,
2551 "enabled": false,
2552- "label": 'Subtract from Selection',
2553- "visible": true
2554+ "label": 'Subtract from Selection'
2555 },
2556 {
2557 "id": 265,
2558 "enabled": false,
2559- "label": 'Add to Selection',
2560- "visible": true
2561+ "label": 'Add to Selection'
2562 },
2563 {
2564 "id": 266,
2565 "enabled": false,
2566- "label": 'Mask to Selection',
2567- "visible": true
2568+ "label": 'Mask to Selection'
2569 },
2570 {
2571 "id": 267,
2572@@ -1728,24 +1277,21 @@
2573 "enabled": false,
2574 "label": 'Disable Layer Mask',
2575 "toggle-state": 0,
2576- "toggle-type": 'checkmark',
2577- "visible": true
2578+ "toggle-type": 'checkmark'
2579 },
2580 {
2581 "id": 269,
2582 "enabled": false,
2583 "label": 'Edit Layer Mask',
2584 "toggle-state": 0,
2585- "toggle-type": 'checkmark',
2586- "visible": true
2587+ "toggle-type": 'checkmark'
2588 },
2589 {
2590 "id": 270,
2591 "enabled": false,
2592 "label": 'Show Layer Mask',
2593 "toggle-state": 0,
2594- "toggle-type": 'checkmark',
2595- "visible": true
2596+ "toggle-type": 'checkmark'
2597 },
2598 {
2599 "id": 271,
2600@@ -1754,35 +1300,27 @@
2601 {
2602 "id": 272,
2603 "enabled": false,
2604- "label": 'Delete Layer Mask',
2605- "visible": true
2606+ "label": 'Delete Layer Mask'
2607 },
2608 {
2609 "id": 273,
2610 "enabled": false,
2611- "label": 'Apply Layer Mask',
2612- "visible": true
2613+ "label": 'Apply Layer Mask'
2614 },
2615 {
2616 "id": 274,
2617- "enabled": true,
2618- "label": 'Add Layer Mask...',
2619- "visible": true
2620+ "label": 'Add Layer Mask...'
2621 }
2622 ]
2623 },
2624 {
2625 "id": 275,
2626 "children-display": 'submenu',
2627- "enabled": true,
2628 "label": 'Stack',
2629- "visible": true,
2630 "submenu": [
2631 {
2632 "id": 276,
2633- "enabled": true,
2634- "label": 'Reverse Layer Order',
2635- "visible": true
2636+ "label": 'Reverse Layer Order'
2637 },
2638 {
2639 "id": 277,
2640@@ -1791,26 +1329,22 @@
2641 {
2642 "id": 278,
2643 "enabled": false,
2644- "label": 'Layer to Bottom',
2645- "visible": true
2646+ "label": 'Layer to Bottom'
2647 },
2648 {
2649 "id": 279,
2650 "enabled": false,
2651- "label": 'Layer to Top',
2652- "visible": true
2653+ "label": 'Layer to Top'
2654 },
2655 {
2656 "id": 280,
2657 "enabled": false,
2658- "label": 'Lower Layer',
2659- "visible": true
2660+ "label": 'Lower Layer'
2661 },
2662 {
2663 "id": 281,
2664 "enabled": false,
2665- "label": 'Raise Layer',
2666- "visible": true
2667+ "label": 'Raise Layer'
2668 },
2669 {
2670 "id": 282,
2671@@ -1820,29 +1354,25 @@
2672 "id": 283,
2673 "enabled": false,
2674 "label": 'Select Bottom Layer',
2675- "shortcut": [['End']],
2676- "visible": true
2677+ "shortcut": [['End']]
2678 },
2679 {
2680 "id": 284,
2681 "enabled": false,
2682 "label": 'Select Top Layer',
2683- "shortcut": [['Home']],
2684- "visible": true
2685+ "shortcut": [['Home']]
2686 },
2687 {
2688 "id": 285,
2689 "enabled": false,
2690 "label": 'Select Next Layer',
2691- "shortcut": [['Page_Down']],
2692- "visible": true
2693+ "shortcut": [['Page_Down']]
2694 },
2695 {
2696 "id": 286,
2697 "enabled": false,
2698 "label": 'Select Previous Layer',
2699- "shortcut": [['Page_Up']],
2700- "visible": true
2701+ "shortcut": [['Page_Up']]
2702 }
2703 ]
2704 },
2705@@ -1854,94 +1384,70 @@
2706 {
2707 "id": 288,
2708 "enabled": false,
2709- "label": 'Empty',
2710- "visible": true
2711+ "label": 'Empty'
2712 }
2713 ]
2714 },
2715 {
2716 "id": 289,
2717- "enabled": true,
2718- "label": 'Delete Layer',
2719- "visible": true
2720+ "label": 'Delete Layer'
2721 },
2722 {
2723 "id": 290,
2724 "enabled": false,
2725- "label": 'Merge Down',
2726- "visible": true
2727+ "label": 'Merge Down'
2728 },
2729 {
2730 "id": 291,
2731 "enabled": false,
2732 "label": 'Anchor Layer',
2733- "shortcut": [['Control', 'h']],
2734- "visible": true
2735+ "shortcut": [['Control', 'h']]
2736 },
2737 {
2738 "id": 292,
2739- "enabled": true,
2740 "label": 'Duplicate Layer',
2741- "shortcut": [['Control', 'Shift', 'd']],
2742- "visible": true
2743+ "shortcut": [['Control', 'Shift', 'd']]
2744 },
2745 {
2746 "id": 293,
2747- "enabled": true,
2748- "label": 'New from Visible',
2749- "visible": true
2750+ "label": 'New from Visible'
2751 },
2752 {
2753 "id": 294,
2754- "enabled": true,
2755 "label": 'New Layer...',
2756- "shortcut": [['Control', 'Shift', 'n']],
2757- "visible": true
2758+ "shortcut": [['Control', 'Shift', 'n']]
2759 }
2760 ]
2761 },
2762 {
2763 "id": 295,
2764 "children-display": 'submenu',
2765- "enabled": true,
2766 "label": 'Colors',
2767- "visible": true,
2768 "submenu": [
2769 {
2770 "id": 296,
2771- "enabled": true,
2772- "label": 'Retinex...',
2773- "visible": true
2774+ "label": 'Retinex...'
2775 },
2776 {
2777 "id": 297,
2778- "enabled": true,
2779- "label": 'Maximum RGB...',
2780- "visible": true
2781+ "label": 'Maximum RGB...'
2782 },
2783 {
2784 "id": 298,
2785 "enabled": false,
2786- "label": 'Hot...',
2787- "visible": true
2788+ "label": 'Hot...'
2789 },
2790 {
2791 "id": 299,
2792- "enabled": true,
2793- "label": 'Filter Pack...',
2794- "visible": true
2795+ "label": 'Filter Pack...'
2796 },
2797 {
2798 "id": 300,
2799- "enabled": true,
2800- "label": 'Color to Alpha...',
2801- "visible": true
2802+ "label": 'Color to Alpha...'
2803 },
2804 {
2805 "id": 301,
2806- "enabled": true,
2807- "label": 'Colorify...',
2808- "visible": true
2809+ "label": 'Colorify...'
2810 },
2811 {
2812 "id": 302,
2813@@ -1950,78 +1456,54 @@
2814 {
2815 "id": 303,
2816 "children-display": 'submenu',
2817- "enabled": true,
2818 "label": 'Info',
2819- "visible": true,
2820 "submenu": [
2821 {
2822 "id": 304,
2823- "enabled": true,
2824- "label": 'Smooth Palette...',
2825- "visible": true
2826+ "label": 'Smooth Palette...'
2827 },
2828 {
2829 "id": 305,
2830- "enabled": true,
2831- "label": 'Colorcube Analysis...',
2832- "visible": true
2833+ "label": 'Colorcube Analysis...'
2834 },
2835 {
2836 "id": 306,
2837- "enabled": true,
2838- "label": 'Border Average...',
2839- "visible": true
2840+ "label": 'Border Average...'
2841 },
2842 {
2843 "id": 307,
2844- "enabled": true,
2845- "label": 'Histogram',
2846- "visible": true
2847+ "label": 'Histogram'
2848 }
2849 ]
2850 },
2851 {
2852 "id": 308,
2853 "children-display": 'submenu',
2854- "enabled": true,
2855 "label": 'Map',
2856- "visible": true,
2857 "submenu": [
2858 {
2859 "id": 309,
2860- "enabled": true,
2861- "label": 'Sample Colorize...',
2862- "visible": true
2863+ "label": 'Sample Colorize...'
2864 },
2865 {
2866 "id": 310,
2867- "enabled": true,
2868- "label": 'Rotate Colors...',
2869- "visible": true
2870+ "label": 'Rotate Colors...'
2871 },
2872 {
2873 "id": 311,
2874- "enabled": true,
2875- "label": 'Palette Map',
2876- "visible": true
2877+ "label": 'Palette Map'
2878 },
2879 {
2880 "id": 312,
2881- "enabled": true,
2882- "label": 'Gradient Map',
2883- "visible": true
2884+ "label": 'Gradient Map'
2885 },
2886 {
2887 "id": 313,
2888- "enabled": true,
2889- "label": 'Color Exchange...',
2890- "visible": true
2891+ "label": 'Color Exchange...'
2892 },
2893 {
2894 "id": 314,
2895- "enabled": true,
2896- "label": 'Alien Map...',
2897- "visible": true
2898+ "label": 'Alien Map...'
2899 },
2900 {
2901 "id": 315,
2902@@ -2030,92 +1512,68 @@
2903 {
2904 "id": 316,
2905 "enabled": false,
2906- "label": 'Set Colormap...',
2907- "visible": true
2908+ "label": 'Set Colormap...'
2909 },
2910 {
2911 "id": 317,
2912 "enabled": false,
2913- "label": 'Rearrange Colormap...',
2914- "visible": true
2915+ "label": 'Rearrange Colormap...'
2916 }
2917 ]
2918 },
2919 {
2920 "id": 318,
2921 "children-display": 'submenu',
2922- "enabled": true,
2923 "label": 'Components',
2924- "visible": true,
2925 "submenu": [
2926 {
2927 "id": 319,
2928 "enabled": false,
2929- "label": 'Recompose',
2930- "visible": true
2931+ "label": 'Recompose'
2932 },
2933 {
2934 "id": 320,
2935- "enabled": true,
2936- "label": 'Decompose...',
2937- "visible": true
2938+ "label": 'Decompose...'
2939 },
2940 {
2941 "id": 321,
2942 "enabled": false,
2943- "label": 'Compose...',
2944- "visible": true
2945+ "label": 'Compose...'
2946 },
2947 {
2948 "id": 322,
2949- "enabled": true,
2950- "label": 'Channel Mixer...',
2951- "visible": true
2952+ "label": 'Channel Mixer...'
2953 }
2954 ]
2955 },
2956 {
2957 "id": 323,
2958 "children-display": 'submenu',
2959- "enabled": true,
2960 "label": 'Auto',
2961- "visible": true,
2962 "submenu": [
2963 {
2964 "id": 324,
2965- "enabled": true,
2966- "label": 'Stretch HSV',
2967- "visible": true
2968+ "label": 'Stretch HSV'
2969 },
2970 {
2971 "id": 325,
2972- "enabled": true,
2973- "label": 'Stretch Contrast',
2974- "visible": true
2975+ "label": 'Stretch Contrast'
2976 },
2977 {
2978 "id": 326,
2979- "enabled": true,
2980- "label": 'Normalize',
2981- "visible": true
2982+ "label": 'Normalize'
2983 },
2984 {
2985 "id": 327,
2986- "enabled": true,
2987- "label": 'Color Enhance',
2988- "visible": true
2989+ "label": 'Color Enhance'
2990 },
2991 {
2992 "id": 328,
2993- "enabled": true,
2994- "label": 'White Balance',
2995- "visible": true
2996+ "label": 'White Balance'
2997 },
2998 {
2999 "id": 329,
3000- "enabled": true,
3001- "label": 'Equalize',
3002- "visible": true
3003+ "label": 'Equalize'
3004 }
3005 ]
3006 },
3007@@ -2125,11 +1583,9 @@
3008 },
3009 {
3010 "id": 331,
3011- "enabled": true,
3012 "label": 'Use GEGL',
3013 "toggle-state": 0,
3014- "toggle-type": 'checkmark',
3015- "visible": true
3016+ "toggle-type": 'checkmark'
3017 },
3018 {
3019 "id": 332,
3020@@ -2137,15 +1593,11 @@
3021 },
3022 {
3023 "id": 333,
3024- "enabled": true,
3025- "label": 'Value Invert',
3026- "visible": true
3027+ "label": 'Value Invert'
3028 },
3029 {
3030 "id": 334,
3031- "enabled": true,
3032- "label": 'Invert',
3033- "visible": true
3034+ "label": 'Invert'
3035 },
3036 {
3037 "id": 335,
3038@@ -2153,87 +1605,61 @@
3039 },
3040 {
3041 "id": 336,
3042- "enabled": true,
3043- "label": 'Desaturate...',
3044- "visible": true
3045+ "label": 'Desaturate...'
3046 },
3047 {
3048 "id": 337,
3049- "enabled": true,
3050- "label": 'Posterize...',
3051- "visible": true
3052+ "label": 'Posterize...'
3053 },
3054 {
3055 "id": 338,
3056- "enabled": true,
3057- "label": 'Curves...',
3058- "visible": true
3059+ "label": 'Curves...'
3060 },
3061 {
3062 "id": 339,
3063- "enabled": true,
3064- "label": 'Levels...',
3065- "visible": true
3066+ "label": 'Levels...'
3067 },
3068 {
3069 "id": 340,
3070- "enabled": true,
3071- "label": 'Threshold...',
3072- "visible": true
3073+ "label": 'Threshold...'
3074 },
3075 {
3076 "id": 341,
3077- "enabled": true,
3078- "label": 'Brightness-Contrast...',
3079- "visible": true
3080+ "label": 'Brightness-Contrast...'
3081 },
3082 {
3083 "id": 342,
3084- "enabled": true,
3085- "label": 'Colorize...',
3086- "visible": true
3087+ "label": 'Colorize...'
3088 },
3089 {
3090 "id": 343,
3091- "enabled": true,
3092- "label": 'Hue-Saturation...',
3093- "visible": true
3094+ "label": 'Hue-Saturation...'
3095 },
3096 {
3097 "id": 344,
3098- "enabled": true,
3099- "label": 'Color Balance...',
3100- "visible": true
3101+ "label": 'Color Balance...'
3102 }
3103 ]
3104 },
3105 {
3106 "id": 345,
3107 "children-display": 'submenu',
3108- "enabled": true,
3109 "label": 'Tools',
3110- "visible": true,
3111 "submenu": [
3112 {
3113 "id": 346,
3114- "enabled": true,
3115 "label": 'Swap Colors',
3116- "shortcut": [['x']],
3117- "visible": true
3118+ "shortcut": [['x']]
3119 },
3120 {
3121 "id": 347,
3122- "enabled": true,
3123 "label": 'Default Colors',
3124- "shortcut": [['d']],
3125- "visible": true
3126+ "shortcut": [['d']]
3127 },
3128 {
3129 "id": 348,
3130- "enabled": true,
3131 "label": 'Toolbox',
3132- "shortcut": [['Control', 'b']],
3133- "visible": true
3134+ "shortcut": [['Control', 'b']]
3135 },
3136 {
3137 "id": 349,
3138@@ -2241,326 +1667,232 @@
3139 },
3140 {
3141 "id": 350,
3142- "enabled": true,
3143- "label": 'GEGL Operation...',
3144- "visible": true
3145+ "label": 'GEGL Operation...'
3146 },
3147 {
3148 "id": 351,
3149- "enabled": true,
3150 "label": 'Text',
3151- "shortcut": [['t']],
3152- "visible": true
3153+ "shortcut": [['t']]
3154 },
3155 {
3156 "id": 352,
3157- "enabled": true,
3158 "label": 'Measure',
3159- "shortcut": [['Shift', 'm']],
3160- "visible": true
3161+ "shortcut": [['Shift', 'm']]
3162 },
3163 {
3164 "id": 353,
3165- "enabled": true,
3166 "label": 'Zoom',
3167- "shortcut": [['z']],
3168- "visible": true
3169+ "shortcut": [['z']]
3170 },
3171 {
3172 "id": 354,
3173- "enabled": true,
3174 "label": 'Color Picker',
3175- "shortcut": [['o']],
3176- "visible": true
3177+ "shortcut": [['o']]
3178 },
3179 {
3180 "id": 355,
3181- "enabled": true,
3182 "label": 'Paths',
3183- "shortcut": [['b']],
3184- "visible": true
3185+ "shortcut": [['b']]
3186 },
3187 {
3188 "id": 356,
3189 "children-display": 'submenu',
3190- "enabled": true,
3191 "label": 'Color Tools',
3192- "visible": true,
3193 "submenu": [
3194 {
3195 "id": 357,
3196- "enabled": true,
3197- "label": 'Desaturate...',
3198- "visible": true
3199+ "label": 'Desaturate...'
3200 },
3201 {
3202 "id": 358,
3203- "enabled": true,
3204- "label": 'Posterize...',
3205- "visible": true
3206+ "label": 'Posterize...'
3207 },
3208 {
3209 "id": 359,
3210- "enabled": true,
3211- "label": 'Curves...',
3212- "visible": true
3213+ "label": 'Curves...'
3214 },
3215 {
3216 "id": 360,
3217- "enabled": true,
3218- "label": 'Levels...',
3219- "visible": true
3220+ "label": 'Levels...'
3221 },
3222 {
3223 "id": 361,
3224- "enabled": true,
3225- "label": 'Threshold...',
3226- "visible": true
3227+ "label": 'Threshold...'
3228 },
3229 {
3230 "id": 362,
3231- "enabled": true,
3232- "label": 'Brightness-Contrast...',
3233- "visible": true
3234+ "label": 'Brightness-Contrast...'
3235 },
3236 {
3237 "id": 363,
3238- "enabled": true,
3239- "label": 'Colorize...',
3240- "visible": true
3241+ "label": 'Colorize...'
3242 },
3243 {
3244 "id": 364,
3245- "enabled": true,
3246- "label": 'Hue-Saturation...',
3247- "visible": true
3248+ "label": 'Hue-Saturation...'
3249 },
3250 {
3251 "id": 365,
3252- "enabled": true,
3253- "label": 'Color Balance...',
3254- "visible": true
3255+ "label": 'Color Balance...'
3256 }
3257 ]
3258 },
3259 {
3260 "id": 366,
3261 "children-display": 'submenu',
3262- "enabled": true,
3263 "label": 'Transform Tools',
3264- "visible": true,
3265 "submenu": [
3266 {
3267 "id": 367,
3268- "enabled": true,
3269 "label": 'Flip',
3270- "shortcut": [['Shift', 'f']],
3271- "visible": true
3272+ "shortcut": [['Shift', 'f']]
3273 },
3274 {
3275 "id": 368,
3276- "enabled": true,
3277 "label": 'Perspective',
3278- "shortcut": [['Shift', 'p']],
3279- "visible": true
3280+ "shortcut": [['Shift', 'p']]
3281 },
3282 {
3283 "id": 369,
3284- "enabled": true,
3285 "label": 'Shear',
3286- "shortcut": [['Shift', 's']],
3287- "visible": true
3288+ "shortcut": [['Shift', 's']]
3289 },
3290 {
3291 "id": 370,
3292- "enabled": true,
3293 "label": 'Scale',
3294- "shortcut": [['Shift', 't']],
3295- "visible": true
3296+ "shortcut": [['Shift', 't']]
3297 },
3298 {
3299 "id": 371,
3300- "enabled": true,
3301 "label": 'Rotate',
3302- "shortcut": [['Shift', 'r']],
3303- "visible": true
3304+ "shortcut": [['Shift', 'r']]
3305 },
3306 {
3307 "id": 372,
3308- "enabled": true,
3309 "label": 'Crop',
3310- "shortcut": [['Shift', 'c']],
3311- "visible": true
3312+ "shortcut": [['Shift', 'c']]
3313 },
3314 {
3315 "id": 373,
3316- "enabled": true,
3317 "label": 'Move',
3318- "shortcut": [['m']],
3319- "visible": true
3320+ "shortcut": [['m']]
3321 },
3322 {
3323 "id": 374,
3324- "enabled": true,
3325 "label": 'Align',
3326- "shortcut": [['q']],
3327- "visible": true
3328+ "shortcut": [['q']]
3329 }
3330 ]
3331 },
3332 {
3333 "id": 375,
3334 "children-display": 'submenu',
3335- "enabled": true,
3336 "label": 'Paint Tools',
3337- "visible": true,
3338 "submenu": [
3339 {
3340 "id": 376,
3341- "enabled": true,
3342 "label": 'Dodge / Burn',
3343- "shortcut": [['Shift', 'd']],
3344- "visible": true
3345+ "shortcut": [['Shift', 'd']]
3346 },
3347 {
3348 "id": 377,
3349- "enabled": true,
3350 "label": 'Smudge',
3351- "shortcut": [['s']],
3352- "visible": true
3353+ "shortcut": [['s']]
3354 },
3355 {
3356 "id": 378,
3357- "enabled": true,
3358 "label": 'Blur / Sharpen',
3359- "shortcut": [['Shift', 'u']],
3360- "visible": true
3361+ "shortcut": [['Shift', 'u']]
3362 },
3363 {
3364 "id": 379,
3365- "enabled": true,
3366- "label": 'Perspective Clone',
3367- "visible": true
3368+ "label": 'Perspective Clone'
3369 },
3370 {
3371 "id": 380,
3372- "enabled": true,
3373 "label": 'Heal',
3374- "shortcut": [['h']],
3375- "visible": true
3376+ "shortcut": [['h']]
3377 },
3378 {
3379 "id": 381,
3380- "enabled": true,
3381 "label": 'Clone',
3382- "shortcut": [['c']],
3383- "visible": true
3384+ "shortcut": [['c']]
3385 },
3386 {
3387 "id": 382,
3388- "enabled": true,
3389 "label": 'Ink',
3390- "shortcut": [['k']],
3391- "visible": true
3392+ "shortcut": [['k']]
3393 },
3394 {
3395 "id": 383,
3396- "enabled": true,
3397 "label": 'Airbrush',
3398- "shortcut": [['a']],
3399- "visible": true
3400+ "shortcut": [['a']]
3401 },
3402 {
3403 "id": 384,
3404- "enabled": true,
3405 "label": 'Eraser',
3406- "shortcut": [['Shift', 'e']],
3407- "visible": true
3408+ "shortcut": [['Shift', 'e']]
3409 },
3410 {
3411 "id": 385,
3412- "enabled": true,
3413 "label": 'Paintbrush',
3414- "shortcut": [['p']],
3415- "visible": true
3416+ "shortcut": [['p']]
3417 },
3418 {
3419 "id": 386,
3420- "enabled": true,
3421 "label": 'Pencil',
3422- "shortcut": [['n']],
3423- "visible": true
3424+ "shortcut": [['n']]
3425 },
3426 {
3427 "id": 387,
3428- "enabled": true,
3429 "label": 'Blend',
3430- "shortcut": [['l']],
3431- "visible": true
3432+ "shortcut": [['l']]
3433 },
3434 {
3435 "id": 388,
3436- "enabled": true,
3437 "label": 'Bucket Fill',
3438- "shortcut": [['Shift', 'b']],
3439- "visible": true
3440+ "shortcut": [['Shift', 'b']]
3441 }
3442 ]
3443 },
3444 {
3445 "id": 389,
3446 "children-display": 'submenu',
3447- "enabled": true,
3448 "label": 'Selection Tools',
3449- "visible": true,
3450 "submenu": [
3451 {
3452 "id": 390,
3453- "enabled": true,
3454 "label": 'Intelligent Scissors',
3455- "shortcut": [['i']],
3456- "visible": true
3457+ "shortcut": [['i']]
3458 },
3459 {
3460 "id": 391,
3461- "enabled": true,
3462 "label": 'By Color Select',
3463- "shortcut": [['Shift', 'o']],
3464- "visible": true
3465+ "shortcut": [['Shift', 'o']]
3466 },
3467 {
3468 "id": 392,
3469- "enabled": true,
3470 "label": 'Fuzzy Select',
3471- "shortcut": [['u']],
3472- "visible": true
3473+ "shortcut": [['u']]
3474 },
3475 {
3476 "id": 393,
3477- "enabled": true,
3478- "label": 'Foreground Select',
3479- "visible": true
3480+ "label": 'Foreground Select'
3481 },
3482 {
3483 "id": 394,
3484- "enabled": true,
3485 "label": 'Free Select',
3486- "shortcut": [['f']],
3487- "visible": true
3488+ "shortcut": [['f']]
3489 },
3490 {
3491 "id": 395,
3492- "enabled": true,
3493 "label": 'Ellipse Select',
3494- "shortcut": [['e']],
3495- "visible": true
3496+ "shortcut": [['e']]
3497 },
3498 {
3499 "id": 396,
3500- "enabled": true,
3501 "label": 'Rectangle Select',
3502- "shortcut": [['r']],
3503- "visible": true
3504+ "shortcut": [['r']]
3505 }
3506 ]
3507 }
3508@@ -2569,49 +1901,35 @@
3509 {
3510 "id": 397,
3511 "children-display": 'submenu',
3512- "enabled": true,
3513 "label": 'Filters',
3514- "visible": true,
3515 "submenu": [
3516 {
3517 "id": 398,
3518 "children-display": 'submenu',
3519- "enabled": true,
3520 "label": 'Script-Fu',
3521- "visible": true,
3522 "submenu": [
3523 {
3524 "id": 399,
3525- "enabled": true,
3526- "label": 'Start Server...',
3527- "visible": true
3528+ "label": 'Start Server...'
3529 },
3530 {
3531 "id": 400,
3532- "enabled": true,
3533- "label": 'Refresh Scripts',
3534- "visible": true
3535+ "label": 'Refresh Scripts'
3536 },
3537 {
3538 "id": 401,
3539- "enabled": true,
3540- "label": 'Console',
3541- "visible": true
3542+ "label": 'Console'
3543 }
3544 ]
3545 },
3546 {
3547 "id": 402,
3548 "children-display": 'submenu',
3549- "enabled": true,
3550 "label": 'Python-Fu',
3551- "visible": true,
3552 "submenu": [
3553 {
3554 "id": 403,
3555- "enabled": true,
3556- "label": 'Console',
3557- "visible": true
3558+ "label": 'Console'
3559 }
3560 ]
3561 },
3562@@ -2622,123 +1940,83 @@
3563 {
3564 "id": 405,
3565 "children-display": 'submenu',
3566- "enabled": true,
3567 "label": 'Alpha to Logo',
3568- "visible": true,
3569 "submenu": [
3570 {
3571 "id": 406,
3572- "enabled": true,
3573- "label": 'Textured...',
3574- "visible": true
3575+ "label": 'Textured...'
3576 },
3577 {
3578 "id": 407,
3579- "enabled": true,
3580- "label": 'Particle Trace...',
3581- "visible": true
3582+ "label": 'Particle Trace...'
3583 },
3584 {
3585 "id": 408,
3586- "enabled": true,
3587- "label": 'Neon...',
3588- "visible": true
3589+ "label": 'Neon...'
3590 },
3591 {
3592 "id": 409,
3593- "enabled": true,
3594- "label": 'Gradient Bevel...',
3595- "visible": true
3596+ "label": 'Gradient Bevel...'
3597 },
3598 {
3599 "id": 410,
3600- "enabled": true,
3601- "label": 'Glowing Hot...',
3602- "visible": true
3603+ "label": 'Glowing Hot...'
3604 },
3605 {
3606 "id": 411,
3607- "enabled": true,
3608- "label": 'Glossy...',
3609- "visible": true
3610+ "label": 'Glossy...'
3611 },
3612 {
3613 "id": 412,
3614- "enabled": true,
3615- "label": 'Frosty...',
3616- "visible": true
3617+ "label": 'Frosty...'
3618 },
3619 {
3620 "id": 413,
3621- "enabled": true,
3622- "label": 'Cool Metal...',
3623- "visible": true
3624+ "label": 'Cool Metal...'
3625 },
3626 {
3627 "id": 414,
3628- "enabled": true,
3629- "label": 'Comic Book...',
3630- "visible": true
3631+ "label": 'Comic Book...'
3632 },
3633 {
3634 "id": 415,
3635- "enabled": true,
3636- "label": 'Chrome...',
3637- "visible": true
3638+ "label": 'Chrome...'
3639 },
3640 {
3641 "id": 416,
3642- "enabled": true,
3643- "label": 'Chip Away...',
3644- "visible": true
3645+ "label": 'Chip Away...'
3646 },
3647 {
3648 "id": 417,
3649- "enabled": true,
3650- "label": 'Chalk...',
3651- "visible": true
3652+ "label": 'Chalk...'
3653 },
3654 {
3655 "id": 418,
3656- "enabled": true,
3657- "label": 'Bovination...',
3658- "visible": true
3659+ "label": 'Bovination...'
3660 },
3661 {
3662 "id": 419,
3663- "enabled": true,
3664- "label": 'Blended...',
3665- "visible": true
3666+ "label": 'Blended...'
3667 },
3668 {
3669 "id": 420,
3670- "enabled": true,
3671- "label": 'Basic I...',
3672- "visible": true
3673+ "label": 'Basic I...'
3674 },
3675 {
3676 "id": 421,
3677- "enabled": true,
3678- "label": 'Basic II...',
3679- "visible": true
3680+ "label": 'Basic II...'
3681 },
3682 {
3683 "id": 422,
3684- "enabled": true,
3685- "label": 'Alien Neon...',
3686- "visible": true
3687+ "label": 'Alien Neon...'
3688 },
3689 {
3690 "id": 423,
3691- "enabled": true,
3692- "label": 'Alien Glow...',
3693- "visible": true
3694+ "label": 'Alien Glow...'
3695 },
3696 {
3697 "id": 424,
3698- "enabled": true,
3699- "label": '3D Outline...',
3700- "visible": true
3701+ "label": '3D Outline...'
3702 }
3703 ]
3704 },
3705@@ -2749,33 +2027,23 @@
3706 {
3707 "id": 426,
3708 "children-display": 'submenu',
3709- "enabled": true,
3710 "label": 'Animation',
3711- "visible": true,
3712 "submenu": [
3713 {
3714 "id": 427,
3715- "enabled": true,
3716- "label": 'Unoptimize',
3717- "visible": true
3718+ "label": 'Unoptimize'
3719 },
3720 {
3721 "id": 428,
3722- "enabled": true,
3723- "label": 'Playback...',
3724- "visible": true
3725+ "label": 'Playback...'
3726 },
3727 {
3728 "id": 429,
3729- "enabled": true,
3730- "label": 'Optimize (for GIF)',
3731- "visible": true
3732+ "label": 'Optimize (for GIF)'
3733 },
3734 {
3735 "id": 430,
3736- "enabled": true,
3737- "label": 'Optimize (Difference)',
3738- "visible": true
3739+ "label": 'Optimize (Difference)'
3740 },
3741 {
3742 "id": 431,
3743@@ -2783,111 +2051,77 @@
3744 },
3745 {
3746 "id": 432,
3747- "enabled": true,
3748- "label": 'Waves...',
3749- "visible": true
3750+ "label": 'Waves...'
3751 },
3752 {
3753 "id": 433,
3754- "enabled": true,
3755- "label": 'Spinning Globe...',
3756- "visible": true
3757+ "label": 'Spinning Globe...'
3758 },
3759 {
3760 "id": 434,
3761- "enabled": true,
3762- "label": 'Rippling...',
3763- "visible": true
3764+ "label": 'Rippling...'
3765 },
3766 {
3767 "id": 435,
3768- "enabled": true,
3769- "label": 'Burn-In...',
3770- "visible": true
3771+ "label": 'Burn-In...'
3772 },
3773 {
3774 "id": 436,
3775- "enabled": true,
3776- "label": 'Blend...',
3777- "visible": true
3778+ "label": 'Blend...'
3779 }
3780 ]
3781 },
3782 {
3783 "id": 437,
3784 "children-display": 'submenu',
3785- "enabled": true,
3786 "label": 'Web',
3787- "visible": true,
3788 "submenu": [
3789 {
3790 "id": 438,
3791- "enabled": true,
3792- "label": 'Slice...',
3793- "visible": true
3794+ "label": 'Slice...'
3795 },
3796 {
3797 "id": 439,
3798- "enabled": true,
3799- "label": 'Semi-Flatten',
3800- "visible": true
3801+ "label": 'Semi-Flatten'
3802 },
3803 {
3804 "id": 440,
3805- "enabled": true,
3806- "label": 'Image Map...',
3807- "visible": true
3808+ "label": 'Image Map...'
3809 }
3810 ]
3811 },
3812 {
3813 "id": 441,
3814 "children-display": 'submenu',
3815- "enabled": true,
3816 "label": 'Render',
3817- "visible": true,
3818 "submenu": [
3819 {
3820 "id": 442,
3821- "enabled": true,
3822- "label": 'Spyrogimp...',
3823- "visible": true
3824+ "label": 'Spyrogimp...'
3825 },
3826 {
3827 "id": 443,
3828- "enabled": true,
3829- "label": 'Sphere Designer...',
3830- "visible": true
3831+ "label": 'Sphere Designer...'
3832 },
3833 {
3834 "id": 444,
3835- "enabled": true,
3836- "label": 'Line Nova...',
3837- "visible": true
3838+ "label": 'Line Nova...'
3839 },
3840 {
3841 "id": 445,
3842- "enabled": true,
3843- "label": 'Lava...',
3844- "visible": true
3845+ "label": 'Lava...'
3846 },
3847 {
3848 "id": 446,
3849- "enabled": true,
3850- "label": 'Gfig...',
3851- "visible": true
3852+ "label": 'Gfig...'
3853 },
3854 {
3855 "id": 447,
3856- "enabled": true,
3857- "label": 'Fractal Explorer...',
3858- "visible": true
3859+ "label": 'Fractal Explorer...'
3860 },
3861 {
3862 "id": 448,
3863- "enabled": true,
3864- "label": 'Circuit...',
3865- "visible": true
3866+ "label": 'Circuit...'
3867 },
3868 {
3869 "id": 449,
3870@@ -2896,111 +2130,77 @@
3871 {
3872 "id": 450,
3873 "children-display": 'submenu',
3874- "enabled": true,
3875 "label": 'Pattern',
3876- "visible": true,
3877 "submenu": [
3878 {
3879 "id": 451,
3880- "enabled": true,
3881- "label": 'Sinus...',
3882- "visible": true
3883+ "label": 'Sinus...'
3884 },
3885 {
3886 "id": 452,
3887- "enabled": true,
3888- "label": 'Qbist...',
3889- "visible": true
3890+ "label": 'Qbist...'
3891 },
3892 {
3893 "id": 453,
3894- "enabled": true,
3895- "label": 'Maze...',
3896- "visible": true
3897+ "label": 'Maze...'
3898 },
3899 {
3900 "id": 454,
3901- "enabled": true,
3902- "label": 'Jigsaw...',
3903- "visible": true
3904+ "label": 'Jigsaw...'
3905 },
3906 {
3907 "id": 455,
3908- "enabled": true,
3909- "label": 'Grid...',
3910- "visible": true
3911+ "label": 'Grid...'
3912 },
3913 {
3914 "id": 456,
3915- "enabled": true,
3916- "label": 'Diffraction Patterns...',
3917- "visible": true
3918+ "label": 'Diffraction Patterns...'
3919 },
3920 {
3921 "id": 457,
3922- "enabled": true,
3923- "label": 'CML Explorer...',
3924- "visible": true
3925+ "label": 'CML Explorer...'
3926 },
3927 {
3928 "id": 458,
3929- "enabled": true,
3930- "label": 'Checkerboard...',
3931- "visible": true
3932+ "label": 'Checkerboard...'
3933 }
3934 ]
3935 },
3936 {
3937 "id": 459,
3938 "children-display": 'submenu',
3939- "enabled": true,
3940 "label": 'Nature',
3941- "visible": true,
3942 "submenu": [
3943 {
3944 "id": 460,
3945- "enabled": true,
3946- "label": 'IFS Fractal...',
3947- "visible": true
3948+ "label": 'IFS Fractal...'
3949 },
3950 {
3951 "id": 461,
3952- "enabled": true,
3953- "label": 'Flame...',
3954- "visible": true
3955+ "label": 'Flame...'
3956 }
3957 ]
3958 },
3959 {
3960 "id": 462,
3961 "children-display": 'submenu',
3962- "enabled": true,
3963 "label": 'Clouds',
3964- "visible": true,
3965 "submenu": [
3966 {
3967 "id": 463,
3968- "enabled": true,
3969- "label": 'Solid Noise...',
3970- "visible": true
3971+ "label": 'Solid Noise...'
3972 },
3973 {
3974 "id": 464,
3975- "enabled": true,
3976- "label": 'Plasma...',
3977- "visible": true
3978+ "label": 'Plasma...'
3979 },
3980 {
3981 "id": 465,
3982- "enabled": true,
3983- "label": 'Fog...',
3984- "visible": true
3985+ "label": 'Fog...'
3986 },
3987 {
3988 "id": 466,
3989- "enabled": true,
3990- "label": 'Difference Clouds...',
3991- "visible": true
3992+ "label": 'Difference Clouds...'
3993 }
3994 ]
3995 }
3996@@ -3009,360 +2209,252 @@
3997 {
3998 "id": 467,
3999 "children-display": 'submenu',
4000- "enabled": true,
4001 "label": 'Map',
4002- "visible": true,
4003 "submenu": [
4004 {
4005 "id": 468,
4006- "enabled": true,
4007- "label": 'Warp...',
4008- "visible": true
4009+ "label": 'Warp...'
4010 },
4011 {
4012 "id": 469,
4013- "enabled": true,
4014- "label": 'Tile...',
4015- "visible": true
4016+ "label": 'Tile...'
4017 },
4018 {
4019 "id": 470,
4020- "enabled": true,
4021- "label": 'Small Tiles...',
4022- "visible": true
4023+ "label": 'Small Tiles...'
4024 },
4025 {
4026 "id": 471,
4027- "enabled": true,
4028- "label": 'Paper Tile...',
4029- "visible": true
4030+ "label": 'Paper Tile...'
4031 },
4032 {
4033 "id": 472,
4034- "enabled": true,
4035- "label": 'Map Object...',
4036- "visible": true
4037+ "label": 'Map Object...'
4038 },
4039 {
4040 "id": 473,
4041- "enabled": true,
4042- "label": 'Make Seamless',
4043- "visible": true
4044+ "label": 'Make Seamless'
4045 },
4046 {
4047 "id": 474,
4048- "enabled": true,
4049- "label": 'Illusion...',
4050- "visible": true
4051+ "label": 'Illusion...'
4052 },
4053 {
4054 "id": 475,
4055- "enabled": true,
4056- "label": 'Fractal Trace...',
4057- "visible": true
4058+ "label": 'Fractal Trace...'
4059 },
4060 {
4061 "id": 476,
4062- "enabled": true,
4063- "label": 'Displace...',
4064- "visible": true
4065+ "label": 'Displace...'
4066 },
4067 {
4068 "id": 477,
4069- "enabled": true,
4070- "label": 'Bump Map...',
4071- "visible": true
4072+ "label": 'Bump Map...'
4073 }
4074 ]
4075 },
4076 {
4077 "id": 478,
4078 "children-display": 'submenu',
4079- "enabled": true,
4080 "label": 'Decor',
4081- "visible": true,
4082 "submenu": [
4083 {
4084 "id": 479,
4085 "enabled": false,
4086- "label": 'Stencil Chrome...',
4087- "visible": true
4088+ "label": 'Stencil Chrome...'
4089 },
4090 {
4091 "id": 480,
4092 "enabled": false,
4093- "label": 'Stencil Carve...',
4094- "visible": true
4095+ "label": 'Stencil Carve...'
4096 },
4097 {
4098 "id": 481,
4099 "enabled": false,
4100- "label": 'Slide...',
4101- "visible": true
4102+ "label": 'Slide...'
4103 },
4104 {
4105 "id": 482,
4106 "enabled": false,
4107- "label": 'Round Corners...',
4108- "visible": true
4109+ "label": 'Round Corners...'
4110 },
4111 {
4112 "id": 483,
4113- "enabled": true,
4114- "label": 'Old Photo...',
4115- "visible": true
4116+ "label": 'Old Photo...'
4117 },
4118 {
4119 "id": 484,
4120- "enabled": true,
4121- "label": 'Fuzzy Border...',
4122- "visible": true
4123+ "label": 'Fuzzy Border...'
4124 },
4125 {
4126 "id": 485,
4127- "enabled": true,
4128- "label": 'Coffee Stain...',
4129- "visible": true
4130+ "label": 'Coffee Stain...'
4131 },
4132 {
4133 "id": 486,
4134- "enabled": true,
4135- "label": 'Add Border...',
4136- "visible": true
4137+ "label": 'Add Border...'
4138 },
4139 {
4140 "id": 487,
4141- "enabled": true,
4142- "label": 'Add Bevel...',
4143- "visible": true
4144+ "label": 'Add Bevel...'
4145 }
4146 ]
4147 },
4148 {
4149 "id": 488,
4150 "children-display": 'submenu',
4151- "enabled": true,
4152 "label": 'Artistic',
4153- "visible": true,
4154 "submenu": [
4155 {
4156 "id": 489,
4157- "enabled": true,
4158- "label": 'Weave...',
4159- "visible": true
4160+ "label": 'Weave...'
4161 },
4162 {
4163 "id": 490,
4164- "enabled": true,
4165- "label": 'Van Gogh (LIC)...',
4166- "visible": true
4167+ "label": 'Van Gogh (LIC)...'
4168 },
4169 {
4170 "id": 491,
4171- "enabled": true,
4172- "label": 'Softglow...',
4173- "visible": true
4174+ "label": 'Softglow...'
4175 },
4176 {
4177 "id": 492,
4178- "enabled": true,
4179- "label": 'Predator...',
4180- "visible": true
4181+ "label": 'Predator...'
4182 },
4183 {
4184 "id": 493,
4185- "enabled": true,
4186- "label": 'Photocopy...',
4187- "visible": true
4188+ "label": 'Photocopy...'
4189 },
4190 {
4191 "id": 494,
4192- "enabled": true,
4193- "label": 'Oilify...',
4194- "visible": true
4195+ "label": 'Oilify...'
4196 },
4197 {
4198 "id": 495,
4199- "enabled": true,
4200- "label": 'GIMPressionist...',
4201- "visible": true
4202+ "label": 'GIMPressionist...'
4203 },
4204 {
4205 "id": 496,
4206- "enabled": true,
4207- "label": 'Cubism...',
4208- "visible": true
4209+ "label": 'Cubism...'
4210 },
4211 {
4212 "id": 497,
4213- "enabled": true,
4214- "label": 'Clothify...',
4215- "visible": true
4216+ "label": 'Clothify...'
4217 },
4218 {
4219 "id": 498,
4220- "enabled": true,
4221- "label": 'Cartoon...',
4222- "visible": true
4223+ "label": 'Cartoon...'
4224 },
4225 {
4226 "id": 499,
4227- "enabled": true,
4228- "label": 'Apply Canvas...',
4229- "visible": true
4230+ "label": 'Apply Canvas...'
4231 }
4232 ]
4233 },
4234 {
4235 "id": 500,
4236 "children-display": 'submenu',
4237- "enabled": true,
4238 "label": 'Combine',
4239- "visible": true,
4240 "submenu": [
4241 {
4242 "id": 501,
4243- "enabled": true,
4244- "label": 'Filmstrip...',
4245- "visible": true
4246+ "label": 'Filmstrip...'
4247 },
4248 {
4249 "id": 502,
4250- "enabled": true,
4251- "label": 'Depth Merge...',
4252- "visible": true
4253+ "label": 'Depth Merge...'
4254 }
4255 ]
4256 },
4257 {
4258 "id": 503,
4259 "children-display": 'submenu',
4260- "enabled": true,
4261 "label": 'Generic',
4262- "visible": true,
4263 "submenu": [
4264 {
4265 "id": 504,
4266- "enabled": true,
4267- "label": 'Erode',
4268- "visible": true
4269+ "label": 'Erode'
4270 },
4271 {
4272 "id": 505,
4273- "enabled": true,
4274- "label": 'Dilate',
4275- "visible": true
4276+ "label": 'Dilate'
4277 },
4278 {
4279 "id": 506,
4280- "enabled": true,
4281- "label": 'Convolution Matrix...',
4282- "visible": true
4283+ "label": 'Convolution Matrix...'
4284 }
4285 ]
4286 },
4287 {
4288 "id": 507,
4289 "children-display": 'submenu',
4290- "enabled": true,
4291 "label": 'Edge-Detect',
4292- "visible": true,
4293 "submenu": [
4294 {
4295 "id": 508,
4296- "enabled": true,
4297- "label": 'Sobel...',
4298- "visible": true
4299+ "label": 'Sobel...'
4300 },
4301 {
4302 "id": 509,
4303- "enabled": true,
4304- "label": 'Neon...',
4305- "visible": true
4306+ "label": 'Neon...'
4307 },
4308 {
4309 "id": 510,
4310- "enabled": true,
4311- "label": 'Laplace',
4312- "visible": true
4313+ "label": 'Laplace'
4314 },
4315 {
4316 "id": 511,
4317- "enabled": true,
4318- "label": 'Edge...',
4319- "visible": true
4320+ "label": 'Edge...'
4321 },
4322 {
4323 "id": 512,
4324- "enabled": true,
4325- "label": 'Difference of Gaussians...',
4326- "visible": true
4327+ "label": 'Difference of Gaussians...'
4328 }
4329 ]
4330 },
4331 {
4332 "id": 513,
4333 "children-display": 'submenu',
4334- "enabled": true,
4335 "label": 'Noise',
4336- "visible": true,
4337 "submenu": [
4338 {
4339 "id": 514,
4340- "enabled": true,
4341- "label": 'Spread...',
4342- "visible": true
4343+ "label": 'Spread...'
4344 },
4345 {
4346 "id": 515,
4347- "enabled": true,
4348- "label": 'Slur...',
4349- "visible": true
4350+ "label": 'Slur...'
4351 },
4352 {
4353 "id": 516,
4354- "enabled": true,
4355- "label": 'RGB Noise...',
4356- "visible": true
4357+ "label": 'RGB Noise...'
4358 },
4359 {
4360 "id": 517,
4361- "enabled": true,
4362- "label": 'Pick...',
4363- "visible": true
4364+ "label": 'Pick...'
4365 },
4366 {
4367 "id": 518,
4368- "enabled": true,
4369- "label": 'Hurl...',
4370- "visible": true
4371+ "label": 'Hurl...'
4372 },
4373 {
4374 "id": 519,
4375- "enabled": true,
4376- "label": 'HSV Noise...',
4377- "visible": true
4378+ "label": 'HSV Noise...'
4379 }
4380 ]
4381 },
4382 {
4383 "id": 520,
4384 "children-display": 'submenu',
4385- "enabled": true,
4386 "label": 'Light and Shadow',
4387- "visible": true,
4388 "submenu": [
4389 {
4390 "id": 521,
4391- "enabled": true,
4392- "label": 'Glass Tile...',
4393- "visible": true
4394+ "label": 'Glass Tile...'
4395 },
4396 {
4397 "id": 522,
4398- "enabled": true,
4399- "label": 'Apply Lens...',
4400- "visible": true
4401+ "label": 'Apply Lens...'
4402 },
4403 {
4404 "id": 523,
4405@@ -3370,21 +2462,15 @@
4406 },
4407 {
4408 "id": 524,
4409- "enabled": true,
4410- "label": 'Xach-Effect...',
4411- "visible": true
4412+ "label": 'Xach-Effect...'
4413 },
4414 {
4415 "id": 525,
4416- "enabled": true,
4417- "label": 'Perspective...',
4418- "visible": true
4419+ "label": 'Perspective...'
4420 },
4421 {
4422 "id": 526,
4423- "enabled": true,
4424- "label": 'Drop Shadow...',
4425- "visible": true
4426+ "label": 'Drop Shadow...'
4427 },
4428 {
4429 "id": 527,
4430@@ -3392,252 +2478,173 @@
4431 },
4432 {
4433 "id": 528,
4434- "enabled": true,
4435- "label": 'Supernova...',
4436- "visible": true
4437+ "label": 'Supernova...'
4438 },
4439 {
4440 "id": 529,
4441- "enabled": true,
4442- "label": 'Sparkle...',
4443- "visible": true
4444+ "label": 'Sparkle...'
4445 },
4446 {
4447 "id": 530,
4448- "enabled": true,
4449- "label": 'Lighting Effects...',
4450- "visible": true
4451+ "label": 'Lighting Effects...'
4452 },
4453 {
4454 "id": 531,
4455- "enabled": true,
4456- "label": 'Lens Flare...',
4457- "visible": true
4458+ "label": 'Lens Flare...'
4459 },
4460 {
4461 "id": 532,
4462- "enabled": true,
4463- "label": 'Gradient Flare...',
4464- "visible": true
4465+ "label": 'Gradient Flare...'
4466 }
4467 ]
4468 },
4469 {
4470 "id": 533,
4471 "children-display": 'submenu',
4472- "enabled": true,
4473 "label": 'Distorts',
4474- "visible": true,
4475 "submenu": [
4476 {
4477 "id": 534,
4478- "enabled": true,
4479- "label": 'Wind...',
4480- "visible": true
4481+ "label": 'Wind...'
4482 },
4483 {
4484 "id": 535,
4485- "enabled": true,
4486- "label": 'Whirl and Pinch...',
4487- "visible": true
4488+ "label": 'Whirl and Pinch...'
4489 },
4490 {
4491 "id": 536,
4492- "enabled": true,
4493- "label": 'Waves...',
4494- "visible": true
4495+ "label": 'Waves...'
4496 },
4497 {
4498 "id": 537,
4499- "enabled": true,
4500- "label": 'Video...',
4501- "visible": true
4502+ "label": 'Video...'
4503 },
4504 {
4505 "id": 538,
4506- "enabled": true,
4507- "label": 'Value Propagate...',
4508- "visible": true
4509+ "label": 'Value Propagate...'
4510 },
4511 {
4512 "id": 539,
4513- "enabled": true,
4514- "label": 'Shift...',
4515- "visible": true
4516+ "label": 'Shift...'
4517 },
4518 {
4519 "id": 540,
4520- "enabled": true,
4521- "label": 'Ripple...',
4522- "visible": true
4523+ "label": 'Ripple...'
4524 },
4525 {
4526 "id": 541,
4527- "enabled": true,
4528- "label": 'Polar Coordinates...',
4529- "visible": true
4530+ "label": 'Polar Coordinates...'
4531 },
4532 {
4533 "id": 542,
4534- "enabled": true,
4535- "label": 'Pagecurl...',
4536- "visible": true
4537+ "label": 'Pagecurl...'
4538 },
4539 {
4540 "id": 543,
4541- "enabled": true,
4542- "label": 'Newsprint...',
4543- "visible": true
4544+ "label": 'Newsprint...'
4545 },
4546 {
4547 "id": 544,
4548- "enabled": true,
4549- "label": 'Mosaic...',
4550- "visible": true
4551+ "label": 'Mosaic...'
4552 },
4553 {
4554 "id": 545,
4555- "enabled": true,
4556- "label": 'Lens Distortion...',
4557- "visible": true
4558+ "label": 'Lens Distortion...'
4559 },
4560 {
4561 "id": 546,
4562- "enabled": true,
4563- "label": 'IWarp...',
4564- "visible": true
4565+ "label": 'IWarp...'
4566 },
4567 {
4568 "id": 547,
4569- "enabled": true,
4570- "label": 'Erase Every Other Row...',
4571- "visible": true
4572+ "label": 'Erase Every Other Row...'
4573 },
4574 {
4575 "id": 548,
4576- "enabled": true,
4577- "label": 'Engrave...',
4578- "visible": true
4579+ "label": 'Engrave...'
4580 },
4581 {
4582 "id": 549,
4583- "enabled": true,
4584- "label": 'Emboss...',
4585- "visible": true
4586+ "label": 'Emboss...'
4587 },
4588 {
4589 "id": 550,
4590- "enabled": true,
4591- "label": 'Curve Bend...',
4592- "visible": true
4593+ "label": 'Curve Bend...'
4594 },
4595 {
4596 "id": 551,
4597- "enabled": true,
4598- "label": 'Blinds...',
4599- "visible": true
4600+ "label": 'Blinds...'
4601 }
4602 ]
4603 },
4604 {
4605 "id": 552,
4606 "children-display": 'submenu',
4607- "enabled": true,
4608 "label": 'Enhance',
4609- "visible": true,
4610 "submenu": [
4611 {
4612 "id": 553,
4613- "enabled": true,
4614- "label": 'Unsharp Mask...',
4615- "visible": true
4616+ "label": 'Unsharp Mask...'
4617 },
4618 {
4619 "id": 554,
4620- "enabled": true,
4621- "label": 'Sharpen...',
4622- "visible": true
4623+ "label": 'Sharpen...'
4624 },
4625 {
4626 "id": 555,
4627- "enabled": true,
4628- "label": 'Red Eye Removal...',
4629- "visible": true
4630+ "label": 'Red Eye Removal...'
4631 },
4632 {
4633 "id": 556,
4634 "enabled": false,
4635- "label": 'NL Filter...',
4636- "visible": true
4637+ "label": 'NL Filter...'
4638 },
4639 {
4640 "id": 557,
4641- "enabled": true,
4642- "label": 'Destripe...',
4643- "visible": true
4644+ "label": 'Destripe...'
4645 },
4646 {
4647 "id": 558,
4648- "enabled": true,
4649- "label": 'Despeckle...',
4650- "visible": true
4651+ "label": 'Despeckle...'
4652 },
4653 {
4654 "id": 559,
4655- "enabled": true,
4656- "label": 'Deinterlace...',
4657- "visible": true
4658+ "label": 'Deinterlace...'
4659 },
4660 {
4661 "id": 560,
4662- "enabled": true,
4663- "label": 'Antialias',
4664- "visible": true
4665+ "label": 'Antialias'
4666 }
4667 ]
4668 },
4669 {
4670 "id": 561,
4671 "children-display": 'submenu',
4672- "enabled": true,
4673 "label": 'Blur',
4674- "visible": true,
4675 "submenu": [
4676 {
4677 "id": 562,
4678- "enabled": true,
4679- "label": 'Tileable Blur...',
4680- "visible": true
4681+ "label": 'Tileable Blur...'
4682 },
4683 {
4684 "id": 563,
4685- "enabled": true,
4686- "label": 'Selective Gaussian Blur...',
4687- "visible": true
4688+ "label": 'Selective Gaussian Blur...'
4689 },
4690 {
4691 "id": 564,
4692- "enabled": true,
4693- "label": 'Pixelize...',
4694- "visible": true
4695+ "label": 'Pixelize...'
4696 },
4697 {
4698 "id": 565,
4699- "enabled": true,
4700- "label": 'Motion Blur...',
4701- "visible": true
4702+ "label": 'Motion Blur...'
4703 },
4704 {
4705 "id": 566,
4706- "enabled": true,
4707- "label": 'Gaussian Blur...',
4708- "visible": true
4709+ "label": 'Gaussian Blur...'
4710 },
4711 {
4712 "id": 567,
4713- "enabled": true,
4714- "label": 'Blur',
4715- "visible": true
4716+ "label": 'Blur'
4717 }
4718 ]
4719 },
4720@@ -3647,9 +2654,7 @@
4721 },
4722 {
4723 "id": 569,
4724- "enabled": true,
4725- "label": 'Reset all Filters',
4726- "visible": true
4727+ "label": 'Reset all Filters'
4728 },
4729 {
4730 "id": 570,
4731@@ -3657,13 +2662,11 @@
4732 "enabled": false,
4733 "label": 'Re-Show Last',
4734 "shortcut": [['Control', 'Shift', 'f']],
4735- "visible": true,
4736 "submenu": [
4737 {
4738 "id": 571,
4739 "enabled": false,
4740- "label": 'Empty',
4741- "visible": true
4742+ "label": 'Empty'
4743 }
4744 ]
4745 },
4746@@ -3671,24 +2674,19 @@
4747 "id": 572,
4748 "enabled": false,
4749 "label": 'Repeat Last',
4750- "shortcut": [['Control', 'f']],
4751- "visible": true
4752+ "shortcut": [['Control', 'f']]
4753 }
4754 ]
4755 },
4756 {
4757 "id": 573,
4758 "children-display": 'submenu',
4759- "enabled": true,
4760 "label": 'Windows',
4761- "visible": true,
4762 "submenu": [
4763 {
4764 "id": 574,
4765- "enabled": true,
4766 "label": 'Toolbox',
4767- "shortcut": [['Control', 'b']],
4768- "visible": true
4769+ "shortcut": [['Control', 'b']]
4770 },
4771 {
4772 "id": 575,
4773@@ -3697,39 +2695,27 @@
4774 {
4775 "id": 576,
4776 "children-display": 'submenu',
4777- "enabled": true,
4778 "label": 'Dockable Dialogs',
4779- "visible": true,
4780 "submenu": [
4781 {
4782 "id": 577,
4783- "enabled": true,
4784- "label": 'Error Console',
4785- "visible": true
4786+ "label": 'Error Console'
4787 },
4788 {
4789 "id": 578,
4790- "enabled": true,
4791- "label": 'Tools',
4792- "visible": true
4793+ "label": 'Tools'
4794 },
4795 {
4796 "id": 579,
4797- "enabled": true,
4798- "label": 'Templates',
4799- "visible": true
4800+ "label": 'Templates'
4801 },
4802 {
4803 "id": 580,
4804- "enabled": true,
4805- "label": 'Document History',
4806- "visible": true
4807+ "label": 'Document History'
4808 },
4809 {
4810 "id": 581,
4811- "enabled": true,
4812- "label": 'Images',
4813- "visible": true
4814+ "label": 'Images'
4815 },
4816 {
4817 "id": 582,
4818@@ -3737,48 +2723,34 @@
4819 },
4820 {
4821 "id": 583,
4822- "enabled": true,
4823- "label": 'Buffers',
4824- "visible": true
4825+ "label": 'Buffers'
4826 },
4827 {
4828 "id": 584,
4829- "enabled": true,
4830- "label": 'Fonts',
4831- "visible": true
4832+ "label": 'Fonts'
4833 },
4834 {
4835 "id": 585,
4836- "enabled": true,
4837- "label": 'Palettes',
4838- "visible": true
4839+ "label": 'Palettes'
4840 },
4841 {
4842 "id": 586,
4843- "enabled": true,
4844 "label": 'Gradients',
4845- "shortcut": [['Control', 'g']],
4846- "visible": true
4847+ "shortcut": [['Control', 'g']]
4848 },
4849 {
4850 "id": 587,
4851- "enabled": true,
4852 "label": 'Patterns',
4853- "shortcut": [['Control', 'Shift', 'p']],
4854- "visible": true
4855+ "shortcut": [['Control', 'Shift', 'p']]
4856 },
4857 {
4858 "id": 588,
4859- "enabled": true,
4860 "label": 'Brushes',
4861- "shortcut": [['Control', 'Shift', 'b']],
4862- "visible": true
4863+ "shortcut": [['Control', 'Shift', 'b']]
4864 },
4865 {
4866 "id": 589,
4867- "enabled": true,
4868- "label": 'Colors',
4869- "visible": true
4870+ "label": 'Colors'
4871 },
4872 {
4873 "id": 590,
4874@@ -3786,64 +2758,44 @@
4875 },
4876 {
4877 "id": 591,
4878- "enabled": true,
4879- "label": 'Sample Points',
4880- "visible": true
4881+ "label": 'Sample Points'
4882 },
4883 {
4884 "id": 592,
4885- "enabled": true,
4886- "label": 'Pointer',
4887- "visible": true
4888+ "label": 'Pointer'
4889 },
4890 {
4891 "id": 593,
4892- "enabled": true,
4893- "label": 'Undo History',
4894- "visible": true
4895+ "label": 'Undo History'
4896 },
4897 {
4898 "id": 594,
4899- "enabled": true,
4900- "label": 'Navigation',
4901- "visible": true
4902+ "label": 'Navigation'
4903 },
4904 {
4905 "id": 595,
4906- "enabled": true,
4907- "label": 'Selection Editor',
4908- "visible": true
4909+ "label": 'Selection Editor'
4910 },
4911 {
4912 "id": 596,
4913- "enabled": true,
4914- "label": 'Histogram',
4915- "visible": true
4916+ "label": 'Histogram'
4917 },
4918 {
4919 "id": 597,
4920- "enabled": true,
4921- "label": 'Colormap',
4922- "visible": true
4923+ "label": 'Colormap'
4924 },
4925 {
4926 "id": 598,
4927- "enabled": true,
4928- "label": 'Paths',
4929- "visible": true
4930+ "label": 'Paths'
4931 },
4932 {
4933 "id": 599,
4934- "enabled": true,
4935- "label": 'Channels',
4936- "visible": true
4937+ "label": 'Channels'
4938 },
4939 {
4940 "id": 600,
4941- "enabled": true,
4942 "label": 'Layers',
4943- "shortcut": [['Control', 'l']],
4944- "visible": true
4945+ "shortcut": [['Control', 'l']]
4946 },
4947 {
4948 "id": 601,
4949@@ -3851,30 +2803,23 @@
4950 },
4951 {
4952 "id": 602,
4953- "enabled": true,
4954- "label": 'Device Status',
4955- "visible": true
4956+ "label": 'Device Status'
4957 },
4958 {
4959 "id": 603,
4960- "enabled": true,
4961- "label": 'Tool Options',
4962- "visible": true
4963+ "label": 'Tool Options'
4964 }
4965 ]
4966 },
4967 {
4968 "id": 604,
4969 "children-display": 'submenu',
4970- "enabled": true,
4971 "label": 'Recently Closed Docks',
4972- "visible": true,
4973 "submenu": [
4974 {
4975 "id": 605,
4976 "enabled": false,
4977- "label": 'Empty',
4978- "visible": true
4979+ "label": 'Empty'
4980 }
4981 ]
4982 }
4983@@ -3883,91 +2828,63 @@
4984 {
4985 "id": 606,
4986 "children-display": 'submenu',
4987- "enabled": true,
4988 "label": 'Help',
4989- "visible": true,
4990 "submenu": [
4991 {
4992 "id": 607,
4993 "children-display": 'submenu',
4994- "enabled": true,
4995 "label": 'User Manual',
4996- "visible": true,
4997 "submenu": [
4998 {
4999 "id": 608,
5000- "enabled": true,
The diff has been truncated for viewing.

Subscribers

People subscribed via source and target branches