[gimp] app: unlink transform directions on tool halt; make chain button insensitive



commit 9f6af7dbd392fdfecd1fd160cf42bf1b0a6ba73f
Author: Ell <ell_se yahoo com>
Date:   Mon Apr 27 16:41:43 2020 +0300

    app: unlink transform directions on tool halt; make chain button insensitive
    
    In GimpTransformGridTool, keep the transform-direction chain-button
    insensitive while the tool is not active, and always unlink the
    button when halting the tool.  This avoids the directions from
    accidentally being kept linked, resulting in the tool seemingly
    having no effect.

 app/tools/gimptransformgridoptions.c | 17 +++++++++++------
 app/tools/gimptransformgridoptions.h |  3 +++
 app/tools/gimptransformgridtool.c    | 30 ++++++++++++++++++++++--------
 3 files changed, 36 insertions(+), 14 deletions(-)
---
diff --git a/app/tools/gimptransformgridoptions.c b/app/tools/gimptransformgridoptions.c
index f91376904d..1cfbc09458 100644
--- a/app/tools/gimptransformgridoptions.c
+++ b/app/tools/gimptransformgridoptions.c
@@ -101,11 +101,12 @@ gimp_transform_grid_options_class_init (GimpTransformGridOptionsClass *klass)
   g_object_class_override_property (object_class, PROP_DIRECTION,
                                     "direction");
 
-  GIMP_CONFIG_PROP_BOOLEAN (object_class, PROP_DIRECTION_LINKED,
-                            "direction-linked",
-                            NULL, NULL,
-                            FALSE,
-                            GIMP_PARAM_STATIC_STRINGS);
+  g_object_class_install_property (object_class, PROP_DIRECTION_LINKED,
+                                   g_param_spec_boolean ("direction-linked",
+                                                         NULL, NULL,
+                                                         FALSE,
+                                                         G_PARAM_READWRITE |
+                                                         G_PARAM_CONSTRUCT));
 
   GIMP_CONFIG_PROP_BOOLEAN (object_class, PROP_SHOW_PREVIEW,
                             "show-preview",
@@ -391,7 +392,8 @@ gimp_transform_grid_options_get_property (GObject    *object,
 GtkWidget *
 gimp_transform_grid_options_gui (GimpToolOptions *tool_options)
 {
-  GObject                    *config = G_OBJECT (tool_options);
+  GObject                    *config  = G_OBJECT (tool_options);
+  GimpTransformGridOptions   *options = GIMP_TRANSFORM_GRID_OPTIONS (tool_options);
   GimpTransformGridToolClass *tg_class;
   GtkWidget                  *vbox;
   GtkWidget                  *vbox2;
@@ -427,6 +429,7 @@ gimp_transform_grid_options_gui (GimpToolOptions *tool_options)
 
       button = gimp_chain_button_new (GIMP_CHAIN_RIGHT);
       gtk_box_pack_start (GTK_BOX (hbox), button, FALSE, FALSE, 0);
+      gtk_widget_set_sensitive (button, FALSE);
       gimp_chain_button_set_icon_size (GIMP_CHAIN_BUTTON (button),
                                        GTK_ICON_SIZE_MENU);
       gtk_widget_show (button);
@@ -435,6 +438,8 @@ gimp_transform_grid_options_gui (GimpToolOptions *tool_options)
                               button, "active",
                               G_BINDING_BIDIRECTIONAL |
                               G_BINDING_SYNC_CREATE);
+
+      options->direction_chain_button = button;
     }
 
   g_type_class_unref (tg_class);
diff --git a/app/tools/gimptransformgridoptions.h b/app/tools/gimptransformgridoptions.h
index 48d2edc0d2..e20b2e8dec 100644
--- a/app/tools/gimptransformgridoptions.h
+++ b/app/tools/gimptransformgridoptions.h
@@ -55,6 +55,9 @@ struct _GimpTransformGridOptions
   gboolean              frompivot_perspective;
   gboolean              cornersnap;
   gboolean              fixedpivot;
+
+  /*  options gui  */
+  GtkWidget            *direction_chain_button;
 };
 
 struct _GimpTransformGridOptionsClass
diff --git a/app/tools/gimptransformgridtool.c b/app/tools/gimptransformgridtool.c
index c5b5953f38..be0f90a90c 100644
--- a/app/tools/gimptransformgridtool.c
+++ b/app/tools/gimptransformgridtool.c
@@ -332,12 +332,13 @@ gimp_transform_grid_tool_initialize (GimpTool     *tool,
                                      GimpDisplay  *display,
                                      GError      **error)
 {
-  GimpTransformTool     *tr_tool  = GIMP_TRANSFORM_TOOL (tool);
-  GimpTransformGridTool *tg_tool  = GIMP_TRANSFORM_GRID_TOOL (tool);
-  GimpImage             *image    = gimp_display_get_image (display);
-  GimpDrawable          *drawable = gimp_image_get_active_drawable (image);
-  GimpObject            *object;
-  UndoInfo              *undo_info;
+  GimpTransformTool        *tr_tool    = GIMP_TRANSFORM_TOOL (tool);
+  GimpTransformGridTool    *tg_tool    = GIMP_TRANSFORM_GRID_TOOL (tool);
+  GimpTransformGridOptions *tg_options = GIMP_TRANSFORM_GRID_TOOL_GET_OPTIONS (tool);
+  GimpImage                *image      = gimp_display_get_image (display);
+  GimpDrawable             *drawable   = gimp_image_get_active_drawable (image);
+  GimpObject               *object;
+  UndoInfo                 *undo_info;
 
   object = gimp_transform_tool_check_active_object (tr_tool, display, error);
 
@@ -384,6 +385,9 @@ gimp_transform_grid_tool_initialize (GimpTool     *tool,
   memcpy (undo_info->trans_infos, tg_tool->trans_infos,
           sizeof (tg_tool->trans_infos));
 
+  if (tg_options->direction_chain_button)
+    gtk_widget_set_sensitive (tg_options->direction_chain_button, TRUE);
+
   g_signal_connect (
     image, "linked-items-changed",
     G_CALLBACK (gimp_transform_grid_tool_image_linked_items_changed),
@@ -1149,8 +1153,9 @@ gimp_transform_grid_tool_image_linked_items_changed (GimpImage             *imag
 static void
 gimp_transform_grid_tool_halt (GimpTransformGridTool *tg_tool)
 {
-  GimpTool          *tool    = GIMP_TOOL (tg_tool);
-  GimpTransformTool *tr_tool = GIMP_TRANSFORM_TOOL (tg_tool);
+  GimpTool                 *tool       = GIMP_TOOL (tg_tool);
+  GimpTransformTool        *tr_tool    = GIMP_TRANSFORM_TOOL (tg_tool);
+  GimpTransformGridOptions *tg_options = GIMP_TRANSFORM_GRID_TOOL_GET_OPTIONS (tg_tool);
 
   if (tool->display)
     {
@@ -1188,6 +1193,15 @@ gimp_transform_grid_tool_halt (GimpTransformGridTool *tg_tool)
 
   gimp_transform_grid_tool_show_active_object (tg_tool);
 
+  if (tg_options->direction_chain_button)
+    {
+      g_object_set (tg_options,
+                    "direction-linked", FALSE,
+                    NULL);
+
+      gtk_widget_set_sensitive (tg_options->direction_chain_button, FALSE);
+    }
+
   tool->display   = NULL;
   tool->drawable  = NULL;
 


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