summaryrefslogtreecommitdiff
path: root/gtk/gtkmenushell.c
diff options
context:
space:
mode:
authorTim Janik <timj@src.gnome.org>1998-01-30 23:47:09 +0000
committerTim Janik <timj@src.gnome.org>1998-01-30 23:47:09 +0000
commit4af33fa24df69f335f07f43e5904a766c8d8ec97 (patch)
treeccc23ba16332f44ae45418f6cf9580036c4c76da /gtk/gtkmenushell.c
parentee7038f9fddd0213c65474e5d59609107caed7c6 (diff)
downloadgtk+-4af33fa24df69f335f07f43e5904a766c8d8ec97.tar.gz
hm, initital refcount revolution commit ;)
still some gnits left, but keep working on it ;) -timj
Diffstat (limited to 'gtk/gtkmenushell.c')
-rw-r--r--gtk/gtkmenushell.c57
1 files changed, 14 insertions, 43 deletions
diff --git a/gtk/gtkmenushell.c b/gtk/gtkmenushell.c
index cee765271b..4c45ca7598 100644
--- a/gtk/gtkmenushell.c
+++ b/gtk/gtkmenushell.c
@@ -33,7 +33,6 @@ enum {
static void gtk_menu_shell_class_init (GtkMenuShellClass *klass);
static void gtk_menu_shell_init (GtkMenuShell *menu_shell);
-static void gtk_menu_shell_destroy (GtkObject *object);
static void gtk_menu_shell_map (GtkWidget *widget);
static void gtk_menu_shell_realize (GtkWidget *widget);
static gint gtk_menu_shell_button_press (GtkWidget *widget,
@@ -107,8 +106,6 @@ gtk_menu_shell_class_init (GtkMenuShellClass *klass)
gtk_object_class_add_signals (object_class, menu_shell_signals, LAST_SIGNAL);
- object_class->destroy = gtk_menu_shell_destroy;
-
widget_class->map = gtk_menu_shell_map;
widget_class->realize = gtk_menu_shell_realize;
widget_class->button_press_event = gtk_menu_shell_button_press;
@@ -218,35 +215,6 @@ gtk_menu_shell_deactivate (GtkMenuShell *menu_shell)
}
static void
-gtk_menu_shell_destroy (GtkObject *object)
-{
- GtkMenuShell *menu_shell;
- GtkWidget *child;
- GList *children;
-
- g_return_if_fail (object != NULL);
- g_return_if_fail (GTK_IS_MENU_SHELL (object));
-
- menu_shell = GTK_MENU_SHELL (object);
-
- children = menu_shell->children;
- while (children)
- {
- child = children->data;
- children = children->next;
-
- child->parent = NULL;
- gtk_object_unref (GTK_OBJECT (child));
- gtk_widget_destroy (child);
- }
-
- g_list_free (menu_shell->children);
-
- if (GTK_OBJECT_CLASS (parent_class)->destroy)
- (* GTK_OBJECT_CLASS (parent_class)->destroy) (object);
-}
-
-static void
gtk_menu_shell_map (GtkWidget *widget)
{
GtkMenuShell *menu_shell;
@@ -335,14 +303,15 @@ gtk_menu_shell_button_press (GtkWidget *widget,
menu_shell->active = TRUE;
menu_item = gtk_get_event_widget ((GdkEvent*) event);
- if (GTK_IS_MENU_ITEM (menu_item) && gtk_menu_shell_is_item (menu_shell, menu_item))
+ if (menu_item && GTK_IS_MENU_ITEM (menu_item) &&
+ gtk_menu_shell_is_item (menu_shell, menu_item))
{
if ((menu_item->parent == widget) &&
(menu_item != menu_shell->active_menu_item))
{
if (menu_shell->active_menu_item)
gtk_menu_item_deselect (GTK_MENU_ITEM (menu_shell->active_menu_item));
-
+
menu_shell->active_menu_item = menu_item;
gtk_menu_item_set_placement (GTK_MENU_ITEM (menu_shell->active_menu_item),
MENU_SHELL_CLASS (menu_shell)->submenu_placement);
@@ -353,7 +322,7 @@ gtk_menu_shell_button_press (GtkWidget *widget,
{
gtk_menu_shell_deactivate (menu_shell);
}
-
+
if (menu_shell->active)
menu_shell->button = event->button;
}
@@ -451,7 +420,7 @@ gtk_menu_shell_enter_notify (GtkWidget *widget,
{
menu_item = gtk_get_event_widget ((GdkEvent*) event);
- if (!GTK_WIDGET_IS_SENSITIVE (menu_item))
+ if (!menu_item || !GTK_WIDGET_IS_SENSITIVE (menu_item))
return TRUE;
if ((menu_item->parent == widget) &&
@@ -496,7 +465,7 @@ gtk_menu_shell_leave_notify (GtkWidget *widget,
menu_shell = GTK_MENU_SHELL (widget);
event_widget = gtk_get_event_widget ((GdkEvent*) event);
- if (!GTK_IS_MENU_ITEM (event_widget))
+ if (!event_widget || !GTK_IS_MENU_ITEM (event_widget))
return TRUE;
menu_item = GTK_MENU_ITEM (event_widget);
@@ -541,18 +510,20 @@ gtk_menu_shell_remove (GtkContainer *container,
GtkWidget *widget)
{
GtkMenuShell *menu_shell;
-
+ gint was_visible;
+
g_return_if_fail (container != NULL);
g_return_if_fail (GTK_IS_MENU_SHELL (container));
g_return_if_fail (widget != NULL);
g_return_if_fail (GTK_IS_MENU_ITEM (widget));
-
- gtk_widget_unparent (widget);
-
+
+ was_visible = GTK_WIDGET_VISIBLE (widget);
menu_shell = GTK_MENU_SHELL (container);
menu_shell->children = g_list_remove (menu_shell->children, widget);
-
- if (GTK_WIDGET_VISIBLE (widget) && GTK_WIDGET_VISIBLE (container))
+
+ gtk_widget_unparent (widget);
+
+ if (was_visible && GTK_WIDGET_VISIBLE (container))
gtk_widget_queue_resize (GTK_WIDGET (container));
}