This is an automated email from the git hooks/post-receive script. b l u e s a b r e p u s h e d a c o m m i t t o b r a n c h m a s t e r in repository panel-plugins/xfce4-pulseaudio-plugin.
commit 55c3352d223110c28afb3c0a23faa6d9cb7debea Author: Sean Davis <[email protected]> Date: Tue Sep 12 06:48:22 2017 -0400 Memory management for MprisMenuItem --- panel-plugin/devicemenuitem.c | 14 ++++- panel-plugin/mprismenuitem.c | 134 +++++++++++++++++++++++++++--------------- panel-plugin/scalemenuitem.c | 11 +++- 3 files changed, 105 insertions(+), 54 deletions(-) diff --git a/panel-plugin/devicemenuitem.c b/panel-plugin/devicemenuitem.c index 6f86be2..db09ea5 100644 --- a/panel-plugin/devicemenuitem.c +++ b/panel-plugin/devicemenuitem.c @@ -111,8 +111,12 @@ device_menu_item_finalize (GObject *object) self = DEVICE_MENU_ITEM (object); priv = GET_PRIVATE (self); - g_free (priv->title); - priv->title = NULL; + if (priv->title) + g_free (priv->title); + + g_object_unref (priv->submenu); + g_object_unref (priv->image); + g_object_unref (priv->label); (*G_OBJECT_CLASS (device_menu_item_parent_class)->finalize) (object); } @@ -150,6 +154,11 @@ G_GNUC_END_IGNORE_DEPRECATIONS /* Configure menu item submenu */ gtk_menu_item_set_submenu (GTK_MENU_ITEM (device_item), priv->submenu); + /* Keep references to the widgets */ + g_object_ref (priv->submenu); + g_object_ref (priv->image); + g_object_ref (priv->label); + return GTK_WIDGET(device_item); } @@ -233,5 +242,4 @@ device_menu_item_set_image_from_icon_name (DeviceMenuItem *item, priv = GET_PRIVATE (item); gtk_image_set_from_icon_name (GTK_IMAGE (priv->image), icon_name, GTK_ICON_SIZE_LARGE_TOOLBAR); - gtk_image_set_pixel_size (GTK_IMAGE (priv->image), 24); } diff --git a/panel-plugin/mprismenuitem.c b/panel-plugin/mprismenuitem.c index 61a9ac4..1f1c7c4 100644 --- a/panel-plugin/mprismenuitem.c +++ b/panel-plugin/mprismenuitem.c @@ -38,11 +38,12 @@ #include <libxfce4util/libxfce4util.h> -static gboolean mpris_menu_item_button_press_event (GtkWidget *menuitem, - GdkEventButton *event); -static gboolean mpris_menu_item_button_release_event (GtkWidget *menuitem, - GdkEventButton *event); -static void update_packing (MprisMenuItem *self); +static gboolean mpris_menu_item_button_press_event (GtkWidget *menuitem, + GdkEventButton *event); +static gboolean mpris_menu_item_button_release_event (GtkWidget *menuitem, + GdkEventButton *event); +static void update_packing (MprisMenuItem *self); +static void mpris_menu_item_finalize (GObject *object); @@ -68,6 +69,7 @@ struct _MprisMenuItemPrivate { gchar *title; gchar *filename; + GtkWidget *image; GtkWidget *vbox; GtkWidget *hbox; GtkWidget *button_box; @@ -91,8 +93,10 @@ G_GNUC_END_IGNORE_DEPRECATIONS static void mpris_menu_item_class_init (MprisMenuItemClass *item_class) { + GObjectClass *gobject_class = G_OBJECT_CLASS (item_class); GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (item_class); + gobject_class->finalize = mpris_menu_item_finalize; widget_class->button_press_event = mpris_menu_item_button_press_event; widget_class->button_release_event = mpris_menu_item_button_release_event; @@ -115,21 +119,6 @@ mpris_menu_item_class_init (MprisMenuItemClass *item_class) } static void -remove_children (GtkContainer *container) -{ - GList * children; - GList * l; - - g_return_if_fail (GTK_IS_CONTAINER (container)); - - children = gtk_container_get_children (container); - - for (l=children; l != NULL; l=l->next) - gtk_container_remove (container, l->data); - g_list_free (children); -} - -static void gtk_label_set_markup_printf_escaped (GtkLabel *label, const gchar *format, ...) @@ -260,6 +249,10 @@ update_packing (MprisMenuItem *self) g_return_if_fail (IS_MPRIS_MENU_ITEM (self)); priv = GET_PRIVATE (self); + + TRACE("entering"); + + /* Create the widgets */ hbox = GTK_BOX (gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 0)); vbox = GTK_BOX (gtk_box_new (GTK_ORIENTATION_VERTICAL, 0)); @@ -267,36 +260,25 @@ update_packing (MprisMenuItem *self) ctx = gtk_widget_get_style_context (GTK_WIDGET (button_box)); gtk_style_context_add_class (ctx, "linked"); - TRACE("entering"); - - if (priv->vbox) - remove_children (GTK_CONTAINER (priv->vbox)); - if (priv->hbox) - { - remove_children (GTK_CONTAINER (priv->hbox)); - gtk_container_remove (GTK_CONTAINER (self), priv->hbox); - } - priv->hbox = GTK_WIDGET(hbox); priv->vbox = GTK_WIDGET(vbox); priv->button_box = GTK_WIDGET(button_box); - /* add the new layout */ - /* [IC] Title [ CON ] - * [ON] Artist [ TROLS ] - */ priv->go_previous = gtk_button_new_from_icon_name ("media-skip-backward-symbolic", GTK_ICON_SIZE_MENU); priv->play_pause = gtk_button_new_from_icon_name ("media-playback-start-symbolic", GTK_ICON_SIZE_MENU); priv->go_next = gtk_button_new_from_icon_name ("media-skip-forward-symbolic", GTK_ICON_SIZE_MENU); - g_signal_connect (priv->play_pause, "clicked", G_CALLBACK (media_play_pause_clicked_event), self); - g_signal_connect (priv->go_previous, "clicked", G_CALLBACK (media_go_previous_clicked_event), self); - g_signal_connect (priv->go_next, "clicked", G_CALLBACK (media_go_next_clicked_event), self); - g_signal_connect (self, "activate", G_CALLBACK (menu_item_activate_event), self); - priv->title_label = track_info_label_new (); priv->artist_label = track_info_label_new (); + priv->image = gtk_image_new_from_icon_name ("audio-x-generic", GTK_ICON_SIZE_LARGE_TOOLBAR); + + /* Pack the widgets */ +G_GNUC_BEGIN_IGNORE_DEPRECATIONS + gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (self), priv->image); +G_GNUC_END_IGNORE_DEPRECATIONS + gtk_image_set_pixel_size (GTK_IMAGE (priv->image), 24); + gtk_box_pack_start (button_box, priv->go_previous, FALSE, FALSE, 0); gtk_box_pack_start (button_box, priv->play_pause, FALSE, FALSE, 0); gtk_box_pack_start (button_box, priv->go_next, FALSE, FALSE, 0); @@ -307,9 +289,27 @@ update_packing (MprisMenuItem *self) gtk_box_pack_start (hbox, GTK_WIDGET (vbox), TRUE, TRUE, 0); gtk_box_pack_start (hbox, GTK_WIDGET (button_box), FALSE, FALSE, 0); + /* Configure the widgets */ mpris_menu_item_set_title (self, priv->player); mpris_menu_item_set_artist (self, _("Not currently playing")); + g_signal_connect (priv->play_pause, "clicked", G_CALLBACK (media_play_pause_clicked_event), self); + g_signal_connect (priv->go_previous, "clicked", G_CALLBACK (media_go_previous_clicked_event), self); + g_signal_connect (priv->go_next, "clicked", G_CALLBACK (media_go_next_clicked_event), self); + g_signal_connect (self, "activate", G_CALLBACK (menu_item_activate_event), self); + + /* Keep a reference to each */ + g_object_ref (priv->title_label); + g_object_ref (priv->artist_label); + g_object_ref (priv->button_box); + g_object_ref (priv->vbox); + g_object_ref (priv->hbox); + g_object_ref (priv->go_previous); + g_object_ref (priv->play_pause); + g_object_ref (priv->go_next); + g_object_ref (priv->image); + + /* And finally display them */ gtk_widget_show_all (priv->button_box); gtk_widget_show_all (priv->hbox); gtk_widget_show_all (priv->vbox); @@ -320,6 +320,51 @@ update_packing (MprisMenuItem *self) static void mpris_menu_item_init (MprisMenuItem *self) { + MprisMenuItemPrivate *priv; + + priv = GET_PRIVATE (self); + + priv->title_label = NULL; + priv->artist_label = NULL; + priv->button_box = NULL; + priv->vbox = NULL; + priv->hbox = NULL; + priv->go_previous = NULL; + priv->play_pause = NULL; + priv->go_next = NULL; + + priv->player = NULL; + priv->title = NULL; + priv->filename = NULL; +} + +static void +mpris_menu_item_finalize (GObject *object) +{ + MprisMenuItem *self; + MprisMenuItemPrivate *priv; + + self = MPRIS_MENU_ITEM (object); + priv = GET_PRIVATE (self); + + if (priv->player) + g_free (priv->player); + if (priv->title) + g_free (priv->title); + if (priv->filename) + g_free (priv->filename); + + g_object_unref (priv->title_label); + g_object_unref (priv->artist_label); + g_object_unref (priv->button_box); + g_object_unref (priv->vbox); + g_object_unref (priv->hbox); + g_object_unref (priv->go_previous); + g_object_unref (priv->play_pause); + g_object_unref (priv->go_next); + g_object_unref (priv->image); + + (*G_OBJECT_CLASS (mpris_menu_item_parent_class)->finalize) (object); } static GtkWidget * @@ -631,7 +676,6 @@ mpris_menu_item_new_with_player (const gchar *player, { MprisMenuItem *menu_item; MprisMenuItemPrivate *priv; - GtkWidget *img; TRACE("entering"); @@ -646,19 +690,11 @@ mpris_menu_item_new_with_player (const gchar *player, priv->title = g_strdup(player); priv->filename = g_strdup(filename); - priv->vbox = NULL; - priv->hbox = NULL; - priv->button_box = NULL; - update_packing (menu_item); gtk_widget_add_events (GTK_WIDGET(menu_item), GDK_SCROLL_MASK|GDK_POINTER_MOTION_MASK|GDK_BUTTON_MOTION_MASK); - img = gtk_image_new_from_icon_name (icon_name, GTK_ICON_SIZE_LARGE_TOOLBAR); -G_GNUC_BEGIN_IGNORE_DEPRECATIONS - gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (menu_item), img); -G_GNUC_END_IGNORE_DEPRECATIONS - gtk_image_set_pixel_size (GTK_IMAGE (img), 24); + gtk_image_set_from_icon_name (GTK_IMAGE (priv->image), icon_name, GTK_ICON_SIZE_LARGE_TOOLBAR); return GTK_WIDGET(menu_item); } diff --git a/panel-plugin/scalemenuitem.c b/panel-plugin/scalemenuitem.c index a572ecb..db96a09 100644 --- a/panel-plugin/scalemenuitem.c +++ b/panel-plugin/scalemenuitem.c @@ -200,8 +200,11 @@ scale_menu_item_finalize (GObject *object) self = SCALE_MENU_ITEM (object); priv = GET_PRIVATE (self); - g_free (priv->icon_name); - priv->icon_name = NULL; + if (priv->icon_name) + g_free (priv->icon_name); + + g_object_unref (priv->image); + g_object_unref (priv->scale); (*G_OBJECT_CLASS (scale_menu_item_parent_class)->finalize) (object); } @@ -363,6 +366,10 @@ G_GNUC_END_IGNORE_DEPRECATIONS g_signal_connect (priv->scale, "value-changed", G_CALLBACK (scale_menu_item_scale_value_changed), scale_item); gtk_widget_add_events (GTK_WIDGET(scale_item), GDK_SCROLL_MASK|GDK_POINTER_MOTION_MASK|GDK_BUTTON_MOTION_MASK); + /* Keep references to the widgets */ + g_object_ref (priv->image); + g_object_ref (priv->scale); + return GTK_WIDGET(scale_item); } -- To stop receiving notification emails like this one, please contact the administrator of this repository. _______________________________________________ Xfce4-commits mailing list [email protected] https://mail.xfce.org/mailman/listinfo/xfce4-commits
