[gimp/gimp-2-10] app: in GimpToolButton, select active tool in menu
- From: Ell <ell src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gimp/gimp-2-10] app: in GimpToolButton, select active tool in menu
- Date: Thu, 26 Mar 2020 11:32:50 +0000 (UTC)
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]