[gnome-applets] window-buttons: disconnect signal handlers from WnckScreen
- From: Alberts Muktupāvels <muktupavels src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-applets] window-buttons: disconnect signal handlers from WnckScreen
- Date: Tue, 10 Mar 2020 15:04:12 +0000 (UTC)
commit 17501333132792d645f4cf6dffa346261d9a5e4e
Author: Alberts Muktupāvels <alberts muktupavels gmail com>
Date: Tue Mar 10 16:36:41 2020 +0200
window-buttons: disconnect signal handlers from WnckScreen
https://gitlab.gnome.org/GNOME/gnome-applets/issues/6
window-buttons/windowbuttons.c | 81 ++++++++++++++++++++++++++++++++++++++----
window-buttons/windowbuttons.h | 7 ++++
2 files changed, 81 insertions(+), 7 deletions(-)
---
diff --git a/window-buttons/windowbuttons.c b/window-buttons/windowbuttons.c
index 0a2327048..acb53a283 100755
--- a/window-buttons/windowbuttons.c
+++ b/window-buttons/windowbuttons.c
@@ -73,8 +73,59 @@ WBApplet* wb_applet_new (void) {
return g_object_new (WB_TYPE_APPLET, NULL);
}
-static void wb_applet_class_init (WBAppletClass *klass) {
- // Called before wb_applet_init()
+static void
+wb_applet_dispose (GObject *object)
+{
+ WBApplet *self;
+
+ self = WB_APPLET (object);
+
+ if (self->active_window_changed_id != 0)
+ {
+ g_signal_handler_disconnect (self->activescreen,
+ self->active_window_changed_id);
+ self->active_window_changed_id = 0;
+ }
+
+ if (self->viewports_changed_id != 0)
+ {
+ g_signal_handler_disconnect (self->activescreen,
+ self->viewports_changed_id);
+ self->viewports_changed_id = 0;
+ }
+
+ if (self->active_workspace_changed_id != 0)
+ {
+ g_signal_handler_disconnect (self->activescreen,
+ self->active_workspace_changed_id);
+ self->active_workspace_changed_id = 0;
+ }
+
+ if (self->window_closed_id != 0)
+ {
+ g_signal_handler_disconnect (self->activescreen,
+ self->window_closed_id);
+ self->window_closed_id = 0;
+ }
+
+ if (self->window_opened_id != 0)
+ {
+ g_signal_handler_disconnect (self->activescreen,
+ self->window_opened_id);
+ self->window_opened_id = 0;
+ }
+
+ G_OBJECT_CLASS (wb_applet_parent_class)->dispose (object);
+}
+
+static void
+wb_applet_class_init (WBAppletClass *self_class)
+{
+ GObjectClass *object_class;
+
+ object_class = G_OBJECT_CLASS (self_class);
+
+ object_class->dispose = wb_applet_dispose;
}
static void wb_applet_init(WBApplet *wbapplet) {
@@ -659,11 +710,27 @@ static void init_wbapplet(PanelApplet *applet) {
gtk_container_add (GTK_CONTAINER(wbapplet), GTK_WIDGET(wbapplet->box));
// Global window tracking
- g_signal_connect(wbapplet->activescreen, "active-window-changed", G_CALLBACK (active_window_changed),
wbapplet);
- g_signal_connect(wbapplet->activescreen, "viewports-changed", G_CALLBACK (viewports_changed),
wbapplet);
- g_signal_connect(wbapplet->activescreen, "active-workspace-changed", G_CALLBACK
(active_workspace_changed), wbapplet);
- g_signal_connect(wbapplet->activescreen, "window-closed", G_CALLBACK (window_closed), wbapplet);
- g_signal_connect(wbapplet->activescreen, "window-opened", G_CALLBACK (window_opened), wbapplet);
+ // Global window tracking
+ wbapplet->active_window_changed_id = g_signal_connect (wbapplet->activescreen,
+ "active-window-changed",
+ G_CALLBACK (active_window_changed),
+ wbapplet);
+ wbapplet->viewports_changed_id = g_signal_connect (wbapplet->activescreen,
+ "viewports-changed",
+ G_CALLBACK (viewports_changed),
+ wbapplet);
+ wbapplet->active_workspace_changed_id = g_signal_connect (wbapplet->activescreen,
+ "active-workspace-changed",
+ G_CALLBACK (active_workspace_changed),
+ wbapplet);
+ wbapplet->window_closed_id = g_signal_connect (wbapplet->activescreen,
+ "window-closed",
+ G_CALLBACK (window_closed),
+ wbapplet);
+ wbapplet->window_opened_id = g_signal_connect (wbapplet->activescreen,
+ "window-opened",
+ G_CALLBACK (window_opened),
+ wbapplet);
// g_signal_connect(G_OBJECT (wbapplet), "change-background", G_CALLBACK (applet_change_background),
wbapplet);
g_signal_connect(G_OBJECT (wbapplet), "change-orient", G_CALLBACK (applet_change_orient), wbapplet);
diff --git a/window-buttons/windowbuttons.h b/window-buttons/windowbuttons.h
index 768b69f41..df89b3046 100755
--- a/window-buttons/windowbuttons.h
+++ b/window-buttons/windowbuttons.h
@@ -169,6 +169,13 @@ typedef struct {
WBPreferences *prefs; // Main preferences
WindowButton **button; // Array of buttons
WnckScreen *activescreen; // Active screen
+
+ gulong active_window_changed_id;
+ gulong viewports_changed_id;
+ gulong active_workspace_changed_id;
+ gulong window_closed_id;
+ gulong window_opened_id;
+
WnckWorkspace *activeworkspace; // Active workspace
WnckWindow *umaxedwindow, // Upper-most maximized window
*activewindow, // Active window
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]