[gimp/gimp-2-10] app: in GimpToolButton, select active tool in menu



commit 327b3fb772d7e93204dcb02ad816abdc64d899a0
Author: Ell <ell_se yahoo com>
Date:   Wed Mar 25 20:05:47 2020 +0200

    app: in GimpToolButton, select active tool in menu
    
    In a GimpToolButton representing a tool group, select the group's
    active-tool item when showing the menu.
    
    (cherry picked from commit 75435c8e6b5ace24f9b01753660511499382f3d9)

 app/widgets/gimptoolbutton.c | 41 +++++++++++++++++++++++++++++++++++++++++
 1 file changed, 41 insertions(+)
---
diff --git a/app/widgets/gimptoolbutton.c b/app/widgets/gimptoolbutton.c
index ff21d96d69..33e99fdc8f 100644
--- a/app/widgets/gimptoolbutton.c
+++ b/app/widgets/gimptoolbutton.c
@@ -130,6 +130,9 @@ static void         gimp_tool_button_icon_size_notify    (GtkToolPalette      *p
                                                           const GParamSpec    *pspec,
                                                           GimpToolButton      *tool_button);
 
+static gboolean     gimp_tool_button_menu_leave_notify   (GtkMenu             *menu,
+                                                          GdkEventCrossing    *event,
+                                                          GimpToolButton      *tool_button);
 static void         gimp_tool_button_menu_deactivate     (GtkMenu             *menu,
                                                           GimpToolButton      *tool_button);
 
@@ -137,6 +140,7 @@ static gboolean     gimp_tool_button_menu_timeout        (GimpToolButton      *t
 
 static void         gimp_tool_button_update              (GimpToolButton      *tool_button);
 static void         gimp_tool_button_update_toggled      (GimpToolButton      *tool_button);
+static void         gimp_tool_button_update_menu         (GimpToolButton      *tool_button);
 
 static void         gimp_tool_button_add_menu_item       (GimpToolButton      *tool_button,
                                                           GimpToolInfo        *tool_info,
@@ -598,6 +602,20 @@ gimp_tool_button_icon_size_notify (GtkToolPalette   *palette,
   gimp_tool_button_reconstruct_menu (tool_button);
 }
 
+static gboolean
+gimp_tool_button_menu_leave_notify (GtkMenu          *menu,
+                                    GdkEventCrossing *event,
+                                    GimpToolButton   *tool_button)
+{
+  if (event->mode == GDK_CROSSING_NORMAL &&
+      gtk_widget_get_visible (tool_button->priv->menu))
+    {
+      gimp_tool_button_update_menu (tool_button);
+    }
+
+  return FALSE;
+}
+
 static gboolean
 gimp_tool_button_menu_deactivate_idle (gpointer data)
 {
@@ -661,6 +679,7 @@ gimp_tool_button_update (GimpToolButton *tool_button)
     }
 
   gimp_tool_button_update_toggled (tool_button);
+  gimp_tool_button_update_menu    (tool_button);
 }
 
 static void
@@ -678,6 +697,23 @@ gimp_tool_button_update_toggled (GimpToolButton *tool_button)
     tool_info && tool_info == gimp_context_get_tool (context));
 }
 
+static void
+gimp_tool_button_update_menu (GimpToolButton *tool_button)
+{
+  if (tool_button->priv->menu &&
+      gtk_widget_get_visible (tool_button->priv->menu))
+    {
+      GimpToolInfo *tool_info = gimp_tool_button_get_tool_info (tool_button);
+
+      if (tool_info)
+        {
+          gtk_menu_shell_select_item (
+            GTK_MENU_SHELL (tool_button->priv->menu),
+            g_hash_table_lookup (tool_button->priv->menu_items, tool_info));
+        }
+    }
+}
+
 static void
 gimp_tool_button_add_menu_item (GimpToolButton *tool_button,
                                 GimpToolInfo   *tool_info,
@@ -787,6 +823,9 @@ gimp_tool_button_reconstruct_menu (GimpToolButton *tool_button)
       gtk_menu_attach_to_widget (GTK_MENU (tool_button->priv->menu),
                                  GTK_WIDGET (tool_button), NULL);
 
+      g_signal_connect (tool_button->priv->menu, "leave-notify-event",
+                        G_CALLBACK (gimp_tool_button_menu_leave_notify),
+                        tool_button);
       g_signal_connect (tool_button->priv->menu, "deactivate",
                         G_CALLBACK (gimp_tool_button_menu_deactivate),
                         tool_button);
@@ -856,6 +895,8 @@ gimp_tool_button_show_menu (GimpToolButton *tool_button,
     tool_button,
     button, activate_time);
 
+  gimp_tool_button_update_menu (tool_button);
+
   return TRUE;
 }
 


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