diff options
Diffstat (limited to 'src/idoscalemenuitem.c')
-rw-r--r-- | src/idoscalemenuitem.c | 73 |
1 files changed, 27 insertions, 46 deletions
diff --git a/src/idoscalemenuitem.c b/src/idoscalemenuitem.c index dff4cb0..51e41b3 100644 --- a/src/idoscalemenuitem.c +++ b/src/idoscalemenuitem.c @@ -40,13 +40,11 @@ static void ido_scale_menu_item_get_property (GObject guint prop_id, GValue *value, GParamSpec *pspec); -static gboolean ido_scale_menu_item_parent_key_press_event (GtkWidget *widget, - GdkEventKey *event, - gpointer user_data); -static void ido_scale_menu_item_select (GtkMenuItem *item); -static void ido_scale_menu_item_deselect (GtkMenuItem *item); -static void ido_scale_menu_item_parent_set (GtkWidget *widget, - GtkWidget *old_parent); +static gboolean ido_scale_menu_item_parent_key_press_event (GtkWidget *widget, + GdkEventKey *event, + gpointer user_data); +static void ido_scale_menu_item_select (GtkMenuItem *item); +static void ido_scale_menu_item_deselect (GtkMenuItem *item); static gboolean ido_scale_menu_item_button_press_event (GtkWidget *menuitem, GdkEventButton *event); static gboolean ido_scale_menu_item_button_release_event (GtkWidget *menuitem, @@ -59,9 +57,8 @@ static void ido_scale_menu_item_primary_image_notify (GtkImage static void ido_scale_menu_item_secondary_image_notify (GtkImage *image, GParamSpec *pspec, IdoScaleMenuItem *item); -static void ido_scale_menu_item_notify (IdoScaleMenuItem *item, - GParamSpec *pspec, - gpointer user_data); +static void ido_scale_menu_item_parent_set (GtkWidget *item, + GtkWidget *previous_parent); static void update_packing (IdoScaleMenuItem *self, IdoScaleMenuItemStyle style); static void default_primary_clicked_handler (IdoScaleMenuItem *self); @@ -273,10 +270,6 @@ ido_scale_menu_item_constructed (GObject *object) G_CALLBACK (ido_scale_menu_item_toggle_size_allocate), NULL); - g_signal_connect (self, "notify", - G_CALLBACK (ido_scale_menu_item_notify), - NULL); - gtk_container_add (GTK_CONTAINER (self), hbox); gtk_widget_add_events (GTK_WIDGET(self), GDK_SCROLL_MASK); @@ -295,12 +288,12 @@ ido_scale_menu_item_class_init (IdoScaleMenuItemClass *item_class) menuitem_class->select = ido_scale_menu_item_select; menuitem_class->deselect = ido_scale_menu_item_deselect; - widget_class->parent_set = ido_scale_menu_item_parent_set; widget_class->button_press_event = ido_scale_menu_item_button_press_event; widget_class->button_release_event = ido_scale_menu_item_button_release_event; widget_class->motion_notify_event = ido_scale_menu_item_motion_notify_event; widget_class->scroll_event = ido_scale_menu_item_scroll_event; widget_class->size_allocate = ido_scale_menu_item_size_allocate; + widget_class->parent_set = ido_scale_menu_item_parent_set; gobject_class->constructed = ido_scale_menu_item_constructed; gobject_class->set_property = ido_scale_menu_item_set_property; @@ -588,26 +581,6 @@ ido_scale_menu_item_deselect (GtkMenuItem *item) GTK_MENU_ITEM_CLASS (ido_scale_menu_item_parent_class)->deselect (item); } -static void -ido_scale_menu_item_parent_set (GtkWidget *widget, - GtkWidget *old_parent) -{ - GtkWidget *parent; - - /* Menus don't pass key events to their children. This works around - * that by listening to key events on the parent widget. */ - - if (old_parent) - g_signal_handlers_disconnect_by_func (old_parent, ido_scale_menu_item_parent_key_press_event, widget); - - parent = gtk_widget_get_parent (widget); - if (parent) - { - g_signal_connect (parent, "key-press-event", - G_CALLBACK (ido_scale_menu_item_parent_key_press_event), widget); - } -} - static gboolean ido_scale_menu_item_button_press_event (GtkWidget *menuitem, GdkEventButton *event) @@ -727,20 +700,28 @@ menu_hidden (GtkWidget *menu, } static void -ido_scale_menu_item_notify (IdoScaleMenuItem *item, - GParamSpec *pspec, - gpointer user_data) +ido_scale_menu_item_parent_set (GtkWidget *item, + GtkWidget *previous_parent) + { - if (g_strcmp0 (pspec->name, "parent")) + GtkWidget *parent; + + if (previous_parent) { - GtkWidget *parent = gtk_widget_get_parent (GTK_WIDGET (item)); + g_signal_handlers_disconnect_by_func (previous_parent, menu_hidden, item); + g_signal_handlers_disconnect_by_func (previous_parent, ido_scale_menu_item_parent_key_press_event, item); + } - if (parent) - { - g_signal_connect (parent, "hide", - G_CALLBACK (menu_hidden), - item); - } + parent = gtk_widget_get_parent (item); + + if (parent) + { + g_signal_connect (parent, "hide", G_CALLBACK (menu_hidden), item); + + /* Menus don't pass key events to their children. This works around + * that by listening to key events on the parent widget. */ + g_signal_connect (parent, "key-press-event", + G_CALLBACK (ido_scale_menu_item_parent_key_press_event), item); } } |