summaryrefslogtreecommitdiff
path: root/gtk/gtkitemfactory.c
diff options
context:
space:
mode:
authorMatthias Clasen <matthiasc@src.gnome.org>2002-02-09 22:12:04 +0000
committerMatthias Clasen <matthiasc@src.gnome.org>2002-02-09 22:12:04 +0000
commitdc46b476e38e3cc0461cf97e4d7d16ec59f4cb29 (patch)
tree6735e92a13cd58a17bac0b33d11dba386662dbeb /gtk/gtkitemfactory.c
parent1e40b8cb180ed58629b7a761eb3582bf52895afa (diff)
downloadgdk-pixbuf-dc46b476e38e3cc0461cf97e4d7d16ec59f4cb29.tar.gz
Avoid segfault for selectable tab labels (even without a segfault, they
* gtk/gtknotebook.c (gtk_notebook_set_focus_child): Avoid segfault for selectable tab labels (even without a segfault, they make the notebook almost unusable, though). (#69985) * gtk/gtkmenuitem.c (gtk_menu_item_set_accel_path): Silently do nothing if the parent is not a menu. (#66492) * gtk/gtkitemfactory.c (gtk_item_factory_from_widget, gtk_item_factory_path_from_widget): Try fetching the return value from menu_item->submenu as a fallback. (#69020)
Diffstat (limited to 'gtk/gtkitemfactory.c')
-rw-r--r--gtk/gtkitemfactory.c25
1 files changed, 23 insertions, 2 deletions
diff --git a/gtk/gtkitemfactory.c b/gtk/gtkitemfactory.c
index 732c51456..6e61ab564 100644
--- a/gtk/gtkitemfactory.c
+++ b/gtk/gtkitemfactory.c
@@ -577,9 +577,19 @@ gtk_item_factory_finalize (GObject *object)
GtkItemFactory*
gtk_item_factory_from_widget (GtkWidget *widget)
{
+ GtkItemFactory *ifactory;
+
g_return_val_if_fail (GTK_IS_WIDGET (widget), NULL);
- return gtk_object_get_data_by_id (GTK_OBJECT (widget), quark_item_factory);
+ ifactory = gtk_object_get_data_by_id (GTK_OBJECT (widget), quark_item_factory);
+ if (ifactory == NULL && GTK_IS_MENU_ITEM (widget) &&
+ GTK_MENU_ITEM (widget)->submenu != NULL)
+ {
+ GtkWidget *menu = GTK_MENU_ITEM (widget)->submenu;
+ ifactory = gtk_object_get_data_by_id (GTK_OBJECT (menu), quark_item_factory);
+ }
+
+ return ifactory;
}
/**
@@ -597,9 +607,20 @@ gtk_item_factory_from_widget (GtkWidget *widget)
G_CONST_RETURN gchar*
gtk_item_factory_path_from_widget (GtkWidget *widget)
{
+ gchar* path;
+
g_return_val_if_fail (GTK_IS_WIDGET (widget), NULL);
- return gtk_object_get_data_by_id (GTK_OBJECT (widget), quark_item_path);
+ path = gtk_object_get_data_by_id (GTK_OBJECT (widget), quark_item_path);
+
+ if (path == NULL && GTK_IS_MENU_ITEM (widget) &&
+ GTK_MENU_ITEM (widget)->submenu != NULL)
+ {
+ GtkWidget *menu = GTK_MENU_ITEM (widget)->submenu;
+ path = gtk_object_get_data_by_id (GTK_OBJECT (menu), quark_item_path);
+ }
+
+ return path;
}
/**