[gnome-applets] window-title: disconnect signal handlers from WnckScreen
- From: Alberts Muktupāvels <muktupavels src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-applets] window-title: disconnect signal handlers from WnckScreen
- Date: Tue, 10 Mar 2020 15:04:02 +0000 (UTC)
commit 9e0ecd0f0efe924521983a689c16f8067ed48e4f
Author: Alberts Muktupāvels <alberts muktupavels gmail com>
Date: Tue Mar 10 16:28:36 2020 +0200
window-title: disconnect signal handlers from WnckScreen
https://gitlab.gnome.org/GNOME/gnome-applets/issues/6
window-title/windowtitle.c | 80 ++++++++++++++++++++++++++++++++++++++++++----
window-title/windowtitle.h | 7 ++++
2 files changed, 80 insertions(+), 7 deletions(-)
---
diff --git a/window-title/windowtitle.c b/window-title/windowtitle.c
index abc397999..e103d67a5 100755
--- a/window-title/windowtitle.c
+++ b/window-title/windowtitle.c
@@ -69,8 +69,59 @@ WTApplet* wt_applet_new (void) {
return g_object_new (WT_TYPE_APPLET, NULL);
}
-static void wt_applet_class_init (WTAppletClass *klass) {
- // Not required
+static void
+wt_applet_dispose (GObject *object)
+{
+ WTApplet *self;
+
+ self = WT_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 (wt_applet_parent_class)->dispose (object);
+}
+
+static void
+wt_applet_class_init (WTAppletClass *self_class)
+{
+ GObjectClass *object_class;
+
+ object_class = G_OBJECT_CLASS (self_class);
+
+ object_class->dispose = wt_applet_dispose;
}
static void wt_applet_init(WTApplet *wtapplet) {
@@ -707,11 +758,26 @@ static void init_wtapplet (PanelApplet *applet) {
g_signal_connect(G_OBJECT (wtapplet->eb_title), "button-press-event", G_CALLBACK (title_clicked),
wtapplet);
// Global window tracking
- g_signal_connect(wtapplet->activescreen, "active-window-changed", G_CALLBACK (active_window_changed),
wtapplet); // <-- this thing is crashing with compiz !!!
- g_signal_connect(wtapplet->activescreen, "viewports-changed", G_CALLBACK (viewports_changed),
wtapplet);
- g_signal_connect(wtapplet->activescreen, "active-workspace-changed", G_CALLBACK
(active_workspace_changed), wtapplet);
- g_signal_connect(wtapplet->activescreen, "window-closed", G_CALLBACK (window_closed), wtapplet);
- g_signal_connect(wtapplet->activescreen, "window-opened", G_CALLBACK (window_opened), wtapplet);
+ wtapplet->active_window_changed_id = g_signal_connect (wtapplet->activescreen,
+ "active-window-changed",
+ G_CALLBACK (active_window_changed),
+ wtapplet); // <-- this thing is crashing with
compiz !!!
+ wtapplet->viewports_changed_id = g_signal_connect (wtapplet->activescreen,
+ "viewports-changed",
+ G_CALLBACK (viewports_changed),
+ wtapplet);
+ wtapplet->active_workspace_changed_id = g_signal_connect (wtapplet->activescreen,
+ "active-workspace-changed",
+ G_CALLBACK (active_workspace_changed),
+ wtapplet);
+ wtapplet->window_closed_id = g_signal_connect (wtapplet->activescreen,
+ "window-closed",
+ G_CALLBACK (window_closed),
+ wtapplet);
+ wtapplet->window_opened_id = g_signal_connect (wtapplet->activescreen,
+ "window-opened",
+ G_CALLBACK (window_opened),
+ wtapplet);
// g_signal_connect(G_OBJECT (wtapplet->title), "size-request", G_CALLBACK
(applet_title_size_request), wtapplet);
g_signal_connect(G_OBJECT (wtapplet), "size-allocate", G_CALLBACK (applet_size_allocate), wtapplet);
diff --git a/window-title/windowtitle.h b/window-title/windowtitle.h
index 492d99923..da7ab906c 100755
--- a/window-title/windowtitle.h
+++ b/window-title/windowtitle.h
@@ -115,6 +115,13 @@ typedef struct {
/* Variables */
WTPreferences *prefs; // Main properties
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]