summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPadraig O'Briain <padraig.obriain@sun.com>2004-05-06 07:35:26 +0000
committerPadraig O'Briain <padraigo@src.gnome.org>2004-05-06 07:35:26 +0000
commit1d66490a5fc02a7f1a77566acdb2952e64c2dcee (patch)
tree4c527d024b4c8cba60f0cf2b10f63d25701715c6
parentc723dd7e48164e7376b65ba7395b2f247700e3de (diff)
downloadgtk+-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--ChangeLog6
-rw-r--r--ChangeLog.pre-2-106
-rw-r--r--ChangeLog.pre-2-66
-rw-r--r--ChangeLog.pre-2-86
-rw-r--r--gtk/gtkmenu.c38
-rw-r--r--gtk/gtkmenu.h1
6 files changed, 63 insertions, 0 deletions
diff --git a/ChangeLog b/ChangeLog
index d101c20896..8094da158a 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -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))