[gtk+] menuitem: fix a crash when reserve_indicator is TRUE
- From: Cosimo Cecchi <cosimoc src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gtk+] menuitem: fix a crash when reserve_indicator is TRUE
- Date: Wed, 30 Dec 2015 02:33:07 +0000 (UTC)
commit 354eb5678b13d101bd097e038245be1a7a4aed9c
Author: Cosimo Cecchi <cosimoc gnome org>
Date: Tue Dec 29 18:31:10 2015 -0800
menuitem: fix a crash when reserve_indicator is TRUE
In that case, code expects an arrow gadget to be present but we're not
creating it in every occurrence.
Fix it by ensuring there will be an arrow gadget when reserve_indicator
is TRUE.
gtk/gtkmenuitem.c | 37 +++++++++++++++++++++++++++++--------
1 files changed, 29 insertions(+), 8 deletions(-)
---
diff --git a/gtk/gtkmenuitem.c b/gtk/gtkmenuitem.c
index 10c2cbd..76f7052 100644
--- a/gtk/gtkmenuitem.c
+++ b/gtk/gtkmenuitem.c
@@ -1503,6 +1503,33 @@ update_node_classes (GtkMenuItem *menu_item)
}
}
+static void
+update_arrow_gadget (GtkMenuItem *menu_item)
+{
+ GtkMenuItemPrivate *priv = menu_item->priv;
+ GtkWidget *widget = GTK_WIDGET (menu_item);
+ gboolean should_have_gadget;
+
+ should_have_gadget = priv->reserve_indicator ||
+ (priv->submenu && !GTK_IS_MENU_BAR (gtk_widget_get_parent (widget)));
+
+ if (should_have_gadget)
+ {
+ if (!priv->arrow_gadget)
+ {
+ priv->arrow_gadget = gtk_builtin_icon_new ("arrow",
+ widget,
+ priv->gadget,
+ NULL);
+ update_node_classes (menu_item);
+ }
+ }
+ else
+ {
+ g_clear_object (&priv->arrow_gadget);
+ }
+}
+
/**
* gtk_menu_item_set_submenu:
* @menu_item: a #GtkMenuItem
@@ -1536,14 +1563,7 @@ gtk_menu_item_set_submenu (GtkMenuItem *menu_item,
widget,
gtk_menu_item_detacher);
- if (!GTK_IS_MENU_BAR (gtk_widget_get_parent (widget)))
- {
- priv->arrow_gadget = gtk_builtin_icon_new ("arrow",
- widget,
- priv->gadget,
- NULL);
- update_node_classes (menu_item);
- }
+ update_arrow_gadget (menu_item);
}
if (gtk_widget_get_parent (widget))
@@ -2666,6 +2686,7 @@ gtk_menu_item_set_reserve_indicator (GtkMenuItem *menu_item,
if (priv->reserve_indicator != reserve)
{
priv->reserve_indicator = reserve;
+ update_arrow_gadget (menu_item);
gtk_widget_queue_resize (GTK_WIDGET (menu_item));
}
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]