Destroy own widget when deallocating

This commit is contained in:
Pierre Pronchery 2013-12-18 23:30:02 +01:00
parent f50c471d62
commit af4a0229bd
5 changed files with 37 additions and 33 deletions

View File

@ -152,10 +152,10 @@ static Battery * _battery_init(PanelAppletHelper * helper, GtkWidget ** widget)
} }
else else
battery->box = hbox; battery->box = hbox;
*widget = battery->box;
battery->timeout = g_timeout_add(5000, _on_timeout, battery); battery->timeout = g_timeout_add(5000, _on_timeout, battery);
_on_timeout(battery); _on_timeout(battery);
gtk_widget_show(battery->image); gtk_widget_show(battery->image);
*widget = battery->box;
return battery; return battery;
} }

View File

@ -1,5 +1,5 @@
/* $Id$ */ /* $Id$ */
/* Copyright (c) 2010-2012 Pierre Pronchery <khorben@defora.org> */ /* Copyright (c) 2010-2013 Pierre Pronchery <khorben@defora.org> */
/* This file is part of DeforaOS Desktop Panel */ /* This file is part of DeforaOS Desktop Panel */
/* This program is free software: you can redistribute it and/or modify /* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by * it under the terms of the GNU General Public License as published by
@ -33,6 +33,7 @@
typedef struct _PanelApplet typedef struct _PanelApplet
{ {
PanelAppletHelper * helper; PanelAppletHelper * helper;
GtkWidget * widget;
char const * format; char const * format;
GtkWidget * label; GtkWidget * label;
guint timeout; guint timeout;
@ -68,7 +69,6 @@ PanelAppletDefinition applet =
static Clock * _clock_init(PanelAppletHelper * helper, GtkWidget ** widget) static Clock * _clock_init(PanelAppletHelper * helper, GtkWidget ** widget)
{ {
Clock * clock; Clock * clock;
GtkWidget * ret;
#ifdef EMBEDDED #ifdef EMBEDDED
PangoFontDescription * desc; PangoFontDescription * desc;
#endif #endif
@ -81,7 +81,7 @@ static Clock * _clock_init(PanelAppletHelper * helper, GtkWidget ** widget)
"format")) == NULL) "format")) == NULL)
#ifdef EMBEDDED #ifdef EMBEDDED
clock->format = _("%H:%M"); clock->format = _("%H:%M");
ret = clock->label; clock->widget = clock->label;
desc = pango_font_description_new(); desc = pango_font_description_new();
pango_font_description_set_weight(desc, PANGO_WEIGHT_BOLD); pango_font_description_set_weight(desc, PANGO_WEIGHT_BOLD);
gtk_widget_modify_font(clock->label, desc); gtk_widget_modify_font(clock->label, desc);
@ -93,15 +93,15 @@ static Clock * _clock_init(PanelAppletHelper * helper, GtkWidget ** widget)
else else
clock->format = _("%H:%M"); clock->format = _("%H:%M");
} }
ret = gtk_frame_new(NULL); clock->widget = gtk_frame_new(NULL);
gtk_frame_set_shadow_type(GTK_FRAME(ret), GTK_SHADOW_IN); gtk_frame_set_shadow_type(GTK_FRAME(clock->widget), GTK_SHADOW_IN);
gtk_container_add(GTK_CONTAINER(ret), clock->label); gtk_container_add(GTK_CONTAINER(clock->widget), clock->label);
#endif #endif
gtk_label_set_justify(GTK_LABEL(clock->label), GTK_JUSTIFY_CENTER); gtk_label_set_justify(GTK_LABEL(clock->label), GTK_JUSTIFY_CENTER);
clock->timeout = g_timeout_add(1000, _on_timeout, clock); clock->timeout = g_timeout_add(1000, _on_timeout, clock);
_on_timeout(clock); _on_timeout(clock);
gtk_widget_show_all(ret); gtk_widget_show_all(clock->widget);
*widget = ret; *widget = clock->widget;
return clock; return clock;
} }
@ -110,6 +110,7 @@ static Clock * _clock_init(PanelAppletHelper * helper, GtkWidget ** widget)
static void _clock_destroy(Clock * clock) static void _clock_destroy(Clock * clock)
{ {
g_source_remove(clock->timeout); g_source_remove(clock->timeout);
gtk_widget_destroy(clock->widget);
free(clock); free(clock);
} }

View File

@ -38,6 +38,7 @@
typedef struct _PanelApplet typedef struct _PanelApplet
{ {
PanelAppletHelper * helper; PanelAppletHelper * helper;
GtkWidget * widget;
GtkWidget * scale; GtkWidget * scale;
guint timeout; guint timeout;
#if defined(__FreeBSD__) || defined(__NetBSD__) #if defined(__FreeBSD__) || defined(__NetBSD__)
@ -79,7 +80,6 @@ static Cpu * _cpu_init(PanelAppletHelper * helper, GtkWidget ** widget)
{ {
#if defined(__FreeBSD__) || defined(__NetBSD__) #if defined(__FreeBSD__) || defined(__NetBSD__)
Cpu * cpu; Cpu * cpu;
GtkWidget * ret;
PangoFontDescription * desc; PangoFontDescription * desc;
GtkWidget * label; GtkWidget * label;
@ -89,24 +89,24 @@ static Cpu * _cpu_init(PanelAppletHelper * helper, GtkWidget ** widget)
return NULL; return NULL;
} }
cpu->helper = helper; cpu->helper = helper;
ret = gtk_hbox_new(FALSE, 0); cpu->widget = gtk_hbox_new(FALSE, 0);
desc = pango_font_description_new(); desc = pango_font_description_new();
pango_font_description_set_weight(desc, PANGO_WEIGHT_BOLD); pango_font_description_set_weight(desc, PANGO_WEIGHT_BOLD);
label = gtk_label_new(_("CPU:")); label = gtk_label_new(_("CPU:"));
gtk_widget_modify_font(label, desc); gtk_widget_modify_font(label, desc);
gtk_box_pack_start(GTK_BOX(ret), label, FALSE, FALSE, 0); gtk_box_pack_start(GTK_BOX(cpu->widget), label, FALSE, FALSE, 0);
cpu->scale = gtk_vscale_new_with_range(0, 100, 1); cpu->scale = gtk_vscale_new_with_range(0, 100, 1);
gtk_widget_set_sensitive(cpu->scale, FALSE); gtk_widget_set_sensitive(cpu->scale, FALSE);
gtk_range_set_inverted(GTK_RANGE(cpu->scale), TRUE); gtk_range_set_inverted(GTK_RANGE(cpu->scale), TRUE);
gtk_scale_set_value_pos(GTK_SCALE(cpu->scale), GTK_POS_RIGHT); gtk_scale_set_value_pos(GTK_SCALE(cpu->scale), GTK_POS_RIGHT);
gtk_box_pack_start(GTK_BOX(ret), cpu->scale, FALSE, FALSE, 0); gtk_box_pack_start(GTK_BOX(cpu->widget), cpu->scale, FALSE, FALSE, 0);
cpu->timeout = g_timeout_add(500, _on_timeout, cpu); cpu->timeout = g_timeout_add(500, _on_timeout, cpu);
cpu->used = 0; cpu->used = 0;
cpu->total = 0; cpu->total = 0;
_on_timeout(cpu); _on_timeout(cpu);
pango_font_description_free(desc); pango_font_description_free(desc);
gtk_widget_show_all(ret); gtk_widget_show_all(cpu->widget);
*widget = ret; *widget = cpu->widget;
return cpu; return cpu;
#else #else
error_set("%s: %s", "cpu", _("Unsupported platform")); error_set("%s: %s", "cpu", _("Unsupported platform"));
@ -119,6 +119,7 @@ static Cpu * _cpu_init(PanelAppletHelper * helper, GtkWidget ** widget)
static void _cpu_destroy(Cpu * cpu) static void _cpu_destroy(Cpu * cpu)
{ {
g_source_remove(cpu->timeout); g_source_remove(cpu->timeout);
gtk_widget_destroy(cpu->widget);
free(cpu); free(cpu);
} }

View File

@ -1,5 +1,5 @@
/* $Id$ */ /* $Id$ */
/* Copyright (c) 2011-2012 Pierre Pronchery <khorben@defora.org> */ /* Copyright (c) 2011-2013 Pierre Pronchery <khorben@defora.org> */
/* This file is part of DeforaOS Desktop Panel */ /* This file is part of DeforaOS Desktop Panel */
/* This program is free software: you can redistribute it and/or modify /* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by * it under the terms of the GNU General Public License as published by
@ -27,6 +27,7 @@
typedef struct _PanelApplet typedef struct _PanelApplet
{ {
PanelAppletHelper * helper; PanelAppletHelper * helper;
GtkWidget * widget;
/* preferences */ /* preferences */
GtkWidget * pr_box; GtkWidget * pr_box;
@ -64,7 +65,6 @@ PanelAppletDefinition applet =
static Lock * _lock_init(PanelAppletHelper * helper, GtkWidget ** widget) static Lock * _lock_init(PanelAppletHelper * helper, GtkWidget ** widget)
{ {
Lock * lock; Lock * lock;
GtkWidget * ret;
GtkWidget * image; GtkWidget * image;
if((lock = malloc(sizeof(*lock))) == NULL) if((lock = malloc(sizeof(*lock))) == NULL)
@ -72,18 +72,18 @@ static Lock * _lock_init(PanelAppletHelper * helper, GtkWidget ** widget)
lock->helper = helper; lock->helper = helper;
lock->pr_box = NULL; lock->pr_box = NULL;
lock->pr_command = NULL; lock->pr_command = NULL;
ret = gtk_button_new(); lock->widget = gtk_button_new();
image = gtk_image_new_from_icon_name("gnome-lockscreen", image = gtk_image_new_from_icon_name("gnome-lockscreen",
helper->icon_size); helper->icon_size);
gtk_button_set_image(GTK_BUTTON(ret), image); gtk_button_set_image(GTK_BUTTON(lock->widget), image);
gtk_button_set_relief(GTK_BUTTON(ret), GTK_RELIEF_NONE); gtk_button_set_relief(GTK_BUTTON(lock->widget), GTK_RELIEF_NONE);
#if GTK_CHECK_VERSION(2, 12, 0) #if GTK_CHECK_VERSION(2, 12, 0)
gtk_widget_set_tooltip_text(ret, _("Lock screen")); gtk_widget_set_tooltip_text(lock->widget, _("Lock screen"));
#endif #endif
g_signal_connect_swapped(G_OBJECT(ret), "clicked", G_CALLBACK( g_signal_connect_swapped(lock->widget, "clicked", G_CALLBACK(
_on_clicked), helper); _on_clicked), helper);
gtk_widget_show_all(ret); gtk_widget_show_all(lock->widget);
*widget = ret; *widget = lock->widget;
return lock; return lock;
} }
@ -91,6 +91,7 @@ static Lock * _lock_init(PanelAppletHelper * helper, GtkWidget ** widget)
/* lock_destroy */ /* lock_destroy */
static void _lock_destroy(Lock * lock) static void _lock_destroy(Lock * lock)
{ {
gtk_widget_destroy(lock->widget);
free(lock); free(lock);
} }

View File

@ -1,5 +1,5 @@
/* $Id$ */ /* $Id$ */
/* Copyright (c) 2010-2012 Pierre Pronchery <khorben@defora.org> */ /* Copyright (c) 2010-2013 Pierre Pronchery <khorben@defora.org> */
/* This file is part of DeforaOS Desktop Panel */ /* This file is part of DeforaOS Desktop Panel */
/* This program is free software: you can redistribute it and/or modify /* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by * it under the terms of the GNU General Public License as published by
@ -28,6 +28,7 @@
typedef struct _PanelApplet typedef struct _PanelApplet
{ {
PanelAppletHelper * helper; PanelAppletHelper * helper;
GtkWidget * widget;
} Logout; } Logout;
@ -60,7 +61,6 @@ PanelAppletDefinition applet =
static Logout * _logout_init(PanelAppletHelper * helper, GtkWidget ** widget) static Logout * _logout_init(PanelAppletHelper * helper, GtkWidget ** widget)
{ {
Logout * logout; Logout * logout;
GtkWidget * ret;
GtkWidget * image; GtkWidget * image;
if((logout = malloc(sizeof(*logout))) == NULL) if((logout = malloc(sizeof(*logout))) == NULL)
@ -71,17 +71,17 @@ static Logout * _logout_init(PanelAppletHelper * helper, GtkWidget ** widget)
helper->error(NULL, _("logout: Logging out is disabled"), 1); helper->error(NULL, _("logout: Logging out is disabled"), 1);
return NULL; return NULL;
} }
ret = gtk_button_new(); logout->widget = gtk_button_new();
image = gtk_image_new_from_icon_name("gnome-logout", helper->icon_size); image = gtk_image_new_from_icon_name("gnome-logout", helper->icon_size);
gtk_button_set_image(GTK_BUTTON(ret), image); gtk_button_set_image(GTK_BUTTON(logout->widget), image);
gtk_button_set_relief(GTK_BUTTON(ret), GTK_RELIEF_NONE); gtk_button_set_relief(GTK_BUTTON(logout->widget), GTK_RELIEF_NONE);
#if GTK_CHECK_VERSION(2, 12, 0) #if GTK_CHECK_VERSION(2, 12, 0)
gtk_widget_set_tooltip_text(ret, _("Logout")); gtk_widget_set_tooltip_text(logout->widget, _("Logout"));
#endif #endif
g_signal_connect_swapped(G_OBJECT(ret), "clicked", G_CALLBACK( g_signal_connect_swapped(logout->widget, "clicked", G_CALLBACK(
_on_clicked), logout); _on_clicked), logout);
gtk_widget_show_all(ret); gtk_widget_show_all(logout->widget);
*widget = ret; *widget = logout->widget;
return logout; return logout;
} }
@ -89,6 +89,7 @@ static Logout * _logout_init(PanelAppletHelper * helper, GtkWidget ** widget)
/* logout_destroy */ /* logout_destroy */
static void _logout_destroy(Logout * logout) static void _logout_destroy(Logout * logout)
{ {
gtk_widget_destroy(logout->widget);
free(logout); free(logout);
} }