diff options
author | Matthias Clasen <matthiasc@src.gnome.org> | 2002-02-09 22:12:04 +0000 |
---|---|---|
committer | Matthias Clasen <matthiasc@src.gnome.org> | 2002-02-09 22:12:04 +0000 |
commit | dc46b476e38e3cc0461cf97e4d7d16ec59f4cb29 (patch) | |
tree | 6735e92a13cd58a17bac0b33d11dba386662dbeb /gtk/gtkitemfactory.c | |
parent | 1e40b8cb180ed58629b7a761eb3582bf52895afa (diff) | |
download | gtk+-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.c | 25 |
1 files changed, 23 insertions, 2 deletions
diff --git a/gtk/gtkitemfactory.c b/gtk/gtkitemfactory.c index 732c514561..6e61ab5644 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; } /** |