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



commit a4296bb6bb64c1d78b56ac4940b6a60655b099a2
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.
    
    (cherry picked from commit 9f6af7dbd392fdfecd1fd160cf42bf1b0a6ba73f)

 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 d085d79422..c8d0b09dc4 100644
--- a/app/tools/gimptransformgridoptions.c
+++ b/app/tools/gimptransformgridoptions.c
@@ -100,11 +100,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",
@@ -390,7 +391,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;
@@ -426,6 +428,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);
@@ -434,6 +437,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 709023b4d8..cca9ba2390 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]