[gimp] app: add a "Use tool groups" option to the toolbox preferences



commit 3cda972100ac741c5f9af04aa677ce4c875c5c92
Author: Ell <ell_se yahoo com>
Date:   Sat Feb 1 13:05:49 2020 +0200

    app: add a "Use tool groups" option to the toolbox preferences
    
    Add a new Gimp::tool_item_ui_list, which is a GimpTreeProxy over
    Gimp::tool_item_list.  This allows us to use either a hierarchical
    or a flat tool list in the UI, by setting the "flat" property of
    the new list.
    
    Use Gimp::tool_item_ui_list in GimpToolPalette, so that the toolbox
    layout is affected by this choice.
    
    Add a "Use tool groups" toggle to the toolbox preferences, and bind
    it to the "flat" property of Gimp::tool_item_ui_list.

 app/config/gimpguiconfig.c       | 14 ++++++++++++++
 app/config/gimpguiconfig.h       |  1 +
 app/config/gimprc-blurbs.h       |  3 +++
 app/core/gimp.c                  | 19 +++++++++++++++++--
 app/core/gimp.h                  |  2 ++
 app/dialogs/preferences-dialog.c | 10 ++++++++++
 app/tools/gimp-tools.c           | 11 ++++++++++-
 app/widgets/gimptoolpalette.c    |  8 ++++----
 8 files changed, 61 insertions(+), 7 deletions(-)
---
diff --git a/app/config/gimpguiconfig.c b/app/config/gimpguiconfig.c
index c88af9fef1..436d0701da 100644
--- a/app/config/gimpguiconfig.c
+++ b/app/config/gimpguiconfig.c
@@ -67,6 +67,7 @@ enum
   PROP_TOOLBOX_FOO_AREA,
   PROP_TOOLBOX_IMAGE_AREA,
   PROP_TOOLBOX_WILBER,
+  PROP_TOOLBOX_GROUPS,
   PROP_THEME_PATH,
   PROP_THEME,
   PROP_PREFER_DARK_THEME,
@@ -278,6 +279,13 @@ gimp_gui_config_class_init (GimpGuiConfigClass *klass)
                             TRUE,
                             GIMP_PARAM_STATIC_STRINGS);
 
+  GIMP_CONFIG_PROP_BOOLEAN (object_class, PROP_TOOLBOX_GROUPS,
+                            "toolbox-groups",
+                            "Use toolbox groups",
+                            TOOLBOX_GROUPS_BLURB,
+                            TRUE,
+                            GIMP_PARAM_STATIC_STRINGS);
+
   path = gimp_config_build_data_path ("themes");
   GIMP_CONFIG_PROP_PATH (object_class, PROP_THEME_PATH,
                          "theme-path",
@@ -622,6 +630,9 @@ gimp_gui_config_set_property (GObject      *object,
     case PROP_TOOLBOX_WILBER:
       gui_config->toolbox_wilber = g_value_get_boolean (value);
       break;
+    case PROP_TOOLBOX_GROUPS:
+      gui_config->toolbox_groups = g_value_get_boolean (value);
+      break;
      case PROP_THEME_PATH:
       g_free (gui_config->theme_path);
       gui_config->theme_path = g_value_dup_string (value);
@@ -791,6 +802,9 @@ gimp_gui_config_get_property (GObject    *object,
     case PROP_TOOLBOX_WILBER:
       g_value_set_boolean (value, gui_config->toolbox_wilber);
       break;
+    case PROP_TOOLBOX_GROUPS:
+      g_value_set_boolean (value, gui_config->toolbox_groups);
+      break;
     case PROP_THEME_PATH:
       g_value_set_string (value, gui_config->theme_path);
       break;
diff --git a/app/config/gimpguiconfig.h b/app/config/gimpguiconfig.h
index 98bf0698be..b757d93bde 100644
--- a/app/config/gimpguiconfig.h
+++ b/app/config/gimpguiconfig.h
@@ -62,6 +62,7 @@ struct _GimpGuiConfig
   gboolean             toolbox_foo_area;
   gboolean             toolbox_image_area;
   gboolean             toolbox_wilber;
+  gboolean             toolbox_groups;
   gchar               *theme_path;
   gchar               *theme;
   gboolean             prefer_dark_theme;
diff --git a/app/config/gimprc-blurbs.h b/app/config/gimprc-blurbs.h
index b2f30bad50..b0cdd19719 100644
--- a/app/config/gimprc-blurbs.h
+++ b/app/config/gimprc-blurbs.h
@@ -672,6 +672,9 @@ _("Show the current foreground and background colors in the toolbox.")
 #define TOOLBOX_FOO_AREA_BLURB \
 _("Show the currently selected brush, pattern and gradient in the toolbox.")
 
+#define TOOLBOX_GROUPS_BLURB \
+_("Use a single toolbox button for grouped tools.")
+
 #define TOOLBOX_IMAGE_AREA_BLURB \
 _("Show the currently active image in the toolbox.")
 
diff --git a/app/core/gimp.c b/app/core/gimp.c
index 9a19f281b8..30dd92a4c3 100644
--- a/app/core/gimp.c
+++ b/app/core/gimp.c
@@ -72,6 +72,7 @@
 #include "gimppattern.h"
 #include "gimptemplate.h"
 #include "gimptoolinfo.h"
+#include "gimptreeproxy.h"
 
 #include "gimp-intl.h"
 
@@ -276,6 +277,11 @@ gimp_init (Gimp *gimp)
   gimp_object_set_static_name (GIMP_OBJECT (gimp->tool_item_list),
                                "tool items");
 
+  gimp->tool_item_ui_list = gimp_tree_proxy_new_for_container (
+    gimp->tool_item_list);
+  gimp_object_set_static_name (GIMP_OBJECT (gimp->tool_item_ui_list),
+                               "ui tool items");
+
   gimp->documents = gimp_document_list_new (gimp);
 
   gimp->templates = gimp_list_new (GIMP_TYPE_TEMPLATE, TRUE);
@@ -398,6 +404,9 @@ gimp_finalize (GObject *object)
 
   gimp_tool_info_set_standard (gimp, NULL);
 
+  g_clear_object (&gimp->tool_item_list);
+  g_clear_object (&gimp->tool_item_ui_list);
+
   if (gimp->tool_info_list)
     {
       gimp_container_foreach (gimp->tool_info_list,
@@ -405,8 +414,6 @@ gimp_finalize (GObject *object)
       g_clear_object (&gimp->tool_info_list);
     }
 
-  g_clear_object (&gimp->tool_item_list);
-
   file_data_exit (gimp);
   xcf_exit (gimp);
 
@@ -932,6 +939,14 @@ gimp_get_tool_item_iter (Gimp *gimp)
   return GIMP_LIST (gimp->tool_item_list)->queue->head;
 }
 
+GList *
+gimp_get_tool_item_ui_iter (Gimp *gimp)
+{
+  g_return_val_if_fail (GIMP_IS_GIMP (gimp), NULL);
+
+  return GIMP_LIST (gimp->tool_item_ui_list)->queue->head;
+}
+
 GimpObject *
 gimp_get_clipboard_object (Gimp *gimp)
 {
diff --git a/app/core/gimp.h b/app/core/gimp.h
index 906df9e432..81c27ed74a 100644
--- a/app/core/gimp.h
+++ b/app/core/gimp.h
@@ -112,6 +112,7 @@ struct _Gimp
   GimpToolInfo           *standard_tool_info;
 
   GimpContainer          *tool_item_list;
+  GimpContainer          *tool_item_ui_list;
 
   /*  the opened and saved images in MRU order  */
   GimpContainer          *documents;
@@ -190,6 +191,7 @@ GList        * gimp_get_image_windows      (Gimp                *gimp);
 GList        * gimp_get_paint_info_iter    (Gimp                *gimp);
 GList        * gimp_get_tool_info_iter     (Gimp                *gimp);
 GList        * gimp_get_tool_item_iter     (Gimp                *gimp);
+GList        * gimp_get_tool_item_ui_iter  (Gimp                *gimp);
 
 GimpObject   * gimp_get_clipboard_object   (Gimp                *gimp);
 
diff --git a/app/dialogs/preferences-dialog.c b/app/dialogs/preferences-dialog.c
index 5f0fa571e1..3c09257728 100644
--- a/app/dialogs/preferences-dialog.c
+++ b/app/dialogs/preferences-dialog.c
@@ -1108,6 +1108,7 @@ prefs_dialog_new (Gimp       *gimp,
   GtkWidget         *entry;
   GtkWidget         *calibrate_button;
   GSList            *group;
+  GtkWidget         *separator;
   GtkWidget         *editor;
   gint               i;
 
@@ -2145,6 +2146,15 @@ prefs_dialog_new (Gimp       *gimp,
                                     GIMP_ICON_IMAGE,
                                     GTK_BOX (vbox2), size_group);
 
+  separator = gtk_separator_new (GTK_ORIENTATION_HORIZONTAL);
+  gtk_box_pack_start (GTK_BOX (vbox2), separator, FALSE, FALSE, 0);
+  gtk_widget_show (separator);
+
+  prefs_check_button_add_with_icon (object, "toolbox-groups",
+                                    _("Use tool _groups"),
+                                    NULL,
+                                    GTK_BOX (vbox2), size_group);
+
   g_clear_object (&size_group);
 
   /* Tool Editor */
diff --git a/app/tools/gimp-tools.c b/app/tools/gimp-tools.c
index 9c8d846d6a..c074525c5e 100644
--- a/app/tools/gimp-tools.c
+++ b/app/tools/gimp-tools.c
@@ -120,7 +120,8 @@ static void   gimp_tools_copy_structure (Gimp                   *gimp,
 
 /*  private variables  */
 
-static gboolean   tool_options_deleted = FALSE;
+static GBinding *toolbox_groups_binding = NULL;
+static gboolean  tool_options_deleted   = FALSE;
 
 
 /*  public functions  */
@@ -215,6 +216,12 @@ gimp_tools_init (Gimp *gimp)
   gimp_tool_options_manager_init (gimp);
 
   tool_manager_init (gimp);
+
+  toolbox_groups_binding = g_object_bind_property (
+    gimp->config,            "toolbox-groups",
+    gimp->tool_item_ui_list, "flat",
+    G_BINDING_INVERT_BOOLEAN |
+    G_BINDING_SYNC_CREATE);
 }
 
 void
@@ -224,6 +231,8 @@ gimp_tools_exit (Gimp *gimp)
 
   g_return_if_fail (GIMP_IS_GIMP (gimp));
 
+  g_clear_object (&toolbox_groups_binding);
+
   tool_manager_exit (gimp);
 
   gimp_tool_options_manager_exit (gimp);
diff --git a/app/widgets/gimptoolpalette.c b/app/widgets/gimptoolpalette.c
index 566e0f8f9c..7b04da2043 100644
--- a/app/widgets/gimptoolpalette.c
+++ b/app/widgets/gimptoolpalette.c
@@ -330,7 +330,7 @@ gimp_tool_palette_set_toolbox (GimpToolPalette *palette,
   gtk_container_add (GTK_CONTAINER (palette), private->group);
   gtk_widget_show (private->group);
 
-  for (list = gimp_get_tool_item_iter (context->gimp);
+  for (list = gimp_get_tool_item_ui_iter (context->gimp);
        list;
        list = g_list_next (list))
     {
@@ -339,13 +339,13 @@ gimp_tool_palette_set_toolbox (GimpToolPalette *palette,
       gimp_tool_palette_add_button (palette, tool_item, -1);
     }
 
-  g_signal_connect_object (context->gimp->tool_item_list, "add",
+  g_signal_connect_object (context->gimp->tool_item_ui_list, "add",
                            G_CALLBACK (gimp_tool_palette_tool_add),
                            palette, 0);
-  g_signal_connect_object (context->gimp->tool_item_list, "remove",
+  g_signal_connect_object (context->gimp->tool_item_ui_list, "remove",
                            G_CALLBACK (gimp_tool_palette_tool_remove),
                            palette, 0);
-  g_signal_connect_object (context->gimp->tool_item_list, "reorder",
+  g_signal_connect_object (context->gimp->tool_item_ui_list, "reorder",
                            G_CALLBACK (gimp_tool_palette_tool_reorder),
                            palette, 0);
 }


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]