diff options
author | Padraig O'Briain <padraig.obriain@sun.com> | 2004-05-06 07:35:26 +0000 |
---|---|---|
committer | Padraig O'Briain <padraigo@src.gnome.org> | 2004-05-06 07:35:26 +0000 |
commit | 1d66490a5fc02a7f1a77566acdb2952e64c2dcee (patch) | |
tree | 4c527d024b4c8cba60f0cf2b10f63d25701715c6 | |
parent | c723dd7e48164e7376b65ba7395b2f247700e3de (diff) | |
download | gtk+-1d66490a5fc02a7f1a77566acdb2952e64c2dcee.tar.gz |
Add new function gtk_menu_get_for_attach_widget. (bug #113112).
2004-05-06 Padraig O'Briain <padraig.obriain@sun.com>
* gtk/gtkmenu.h:
* gtk/gtkmenu.c: Add new function gtk_menu_get_for_attach_widget.
(bug #113112).
-rw-r--r-- | ChangeLog | 6 | ||||
-rw-r--r-- | ChangeLog.pre-2-10 | 6 | ||||
-rw-r--r-- | ChangeLog.pre-2-6 | 6 | ||||
-rw-r--r-- | ChangeLog.pre-2-8 | 6 | ||||
-rw-r--r-- | gtk/gtkmenu.c | 38 | ||||
-rw-r--r-- | gtk/gtkmenu.h | 1 |
6 files changed, 63 insertions, 0 deletions
@@ -1,3 +1,9 @@ +2004-05-06 Padraig O'Briain <padraig.obriain@sun.com> + + * gtk/gtkmenu.h: + * gtk/gtkmenu.c: Add new function gtk_menu_get_for_attach_widget. + (bug #113112). + Thu May 6 00:24:11 2004 Matthias Clasen <maclas@gmx.de> * gtk/gtkactiongroup.h: diff --git a/ChangeLog.pre-2-10 b/ChangeLog.pre-2-10 index d101c20896..8094da158a 100644 --- a/ChangeLog.pre-2-10 +++ b/ChangeLog.pre-2-10 @@ -1,3 +1,9 @@ +2004-05-06 Padraig O'Briain <padraig.obriain@sun.com> + + * gtk/gtkmenu.h: + * gtk/gtkmenu.c: Add new function gtk_menu_get_for_attach_widget. + (bug #113112). + Thu May 6 00:24:11 2004 Matthias Clasen <maclas@gmx.de> * gtk/gtkactiongroup.h: diff --git a/ChangeLog.pre-2-6 b/ChangeLog.pre-2-6 index d101c20896..8094da158a 100644 --- a/ChangeLog.pre-2-6 +++ b/ChangeLog.pre-2-6 @@ -1,3 +1,9 @@ +2004-05-06 Padraig O'Briain <padraig.obriain@sun.com> + + * gtk/gtkmenu.h: + * gtk/gtkmenu.c: Add new function gtk_menu_get_for_attach_widget. + (bug #113112). + Thu May 6 00:24:11 2004 Matthias Clasen <maclas@gmx.de> * gtk/gtkactiongroup.h: diff --git a/ChangeLog.pre-2-8 b/ChangeLog.pre-2-8 index d101c20896..8094da158a 100644 --- a/ChangeLog.pre-2-8 +++ b/ChangeLog.pre-2-8 @@ -1,3 +1,9 @@ +2004-05-06 Padraig O'Briain <padraig.obriain@sun.com> + + * gtk/gtkmenu.h: + * gtk/gtkmenu.c: Add new function gtk_menu_get_for_attach_widget. + (bug #113112). + Thu May 6 00:24:11 2004 Matthias Clasen <maclas@gmx.de> * gtk/gtkactiongroup.h: diff --git a/gtk/gtkmenu.c b/gtk/gtkmenu.c index 9cd1db57df..180ac0b561 100644 --- a/gtk/gtkmenu.c +++ b/gtk/gtkmenu.c @@ -62,6 +62,7 @@ #define MENU_SCROLL_TIMEOUT2 50 #define ATTACH_INFO_KEY "gtk-menu-child-attach-info-key" +#define ATTACHED_MENUS "gtk-attached-menus" typedef struct _GtkMenuAttachData GtkMenuAttachData; typedef struct _GtkMenuPrivate GtkMenuPrivate; @@ -984,6 +985,7 @@ gtk_menu_attach_to_widget (GtkMenu *menu, GtkMenuDetachFunc detacher) { GtkMenuAttachData *data; + GList *list; g_return_if_fail (GTK_IS_MENU (menu)); g_return_if_fail (GTK_IS_WIDGET (attach_widget)); @@ -1012,6 +1014,12 @@ gtk_menu_attach_to_widget (GtkMenu *menu, data->detacher = detacher; g_object_set_data (G_OBJECT (menu), attach_data_key, data); + list = g_object_get_data (G_OBJECT (attach_widget), ATTACHED_MENUS); + if (!g_list_find (list, menu)) + { + list = g_list_prepend (list, menu); + } + g_object_set_data_full (G_OBJECT (attach_widget), ATTACHED_MENUS, list, (GtkDestroyNotify) g_list_free); if (GTK_WIDGET_STATE (menu) != GTK_STATE_NORMAL) gtk_widget_set_state (GTK_WIDGET (menu), GTK_STATE_NORMAL); @@ -1041,6 +1049,7 @@ void gtk_menu_detach (GtkMenu *menu) { GtkMenuAttachData *data; + GList *list; g_return_if_fail (GTK_IS_MENU (menu)); @@ -1059,6 +1068,12 @@ gtk_menu_detach (GtkMenu *menu) menu); data->detacher (data->attach_widget, menu); + list = g_object_steal_data (G_OBJECT (data->attach_widget), ATTACHED_MENUS); + list = g_list_remove (list, menu); + if (list) + g_object_set_data_full (G_OBJECT (data->attach_widget), ATTACHED_MENUS, list, (GtkDestroyNotify) g_list_free); + else + g_object_set_data (G_OBJECT (data->attach_widget), ATTACHED_MENUS, NULL); if (GTK_WIDGET_REALIZED (menu)) gtk_widget_unrealize (GTK_WIDGET (menu)); @@ -4173,3 +4188,26 @@ gtk_menu_set_monitor (GtkMenu *menu, priv->monitor_num = monitor_num; } + +/** + * gtk_menu_get_for_attach_widget: + * @widget: a #GtkWidget + * + * Returns a list of the menus which are attached to this widget. + * This list is owned by GTK+ and must not be modified. + * + * Return value: the list of menus attached to his widget. + * + * Since: 2.6 + **/ +GList* +gtk_menu_get_for_attach_widget (GtkWidget *widget) +{ + GList *list; + + g_return_val_if_fail (GTK_IS_WIDGET (widget), NULL); + + list = g_object_get_data (G_OBJECT (widget), ATTACHED_MENUS); + return list; +} + diff --git a/gtk/gtkmenu.h b/gtk/gtkmenu.h index 5701f5cc9a..f1104c87e8 100644 --- a/gtk/gtkmenu.h +++ b/gtk/gtkmenu.h @@ -198,6 +198,7 @@ void gtk_menu_attach (GtkMenu *menu, void gtk_menu_set_monitor (GtkMenu *menu, gint monitor_num); +GList* gtk_menu_get_for_attach_widget (GtkWidget *widget); #ifndef GTK_DISABLE_DEPRECATED #define gtk_menu_append(menu,child) gtk_menu_shell_append ((GtkMenuShell *)(menu),(child)) |