From af90d4050d1148e4f9d039b5dfef464e28bda37f Mon Sep 17 00:00:00 2001 From: Jeremie Knuesel Date: Fri, 16 Feb 2018 16:42:33 +0100 Subject: [PATCH] Store monitors-changed handler for disconnection --- zathura/callbacks.c | 16 +++++++++------- zathura/zathura.c | 3 +++ zathura/zathura.h | 2 ++ 3 files changed, 14 insertions(+), 7 deletions(-) diff --git a/zathura/callbacks.c b/zathura/callbacks.c index 04106c1..4499cdb 100644 --- a/zathura/callbacks.c +++ b/zathura/callbacks.c @@ -230,24 +230,26 @@ cb_monitors_changed(GdkScreen* screen, gpointer data) } void -cb_widget_screen_changed(GtkWidget* widget, GdkScreen* UNUSED(previous_screen), gpointer data) +cb_widget_screen_changed(GtkWidget* widget, GdkScreen* previous_screen, gpointer data) { - girara_debug("signal received"); + girara_debug("called"); zathura_t* zathura = data; if (widget == NULL || zathura == NULL) { return; } + /* disconnect previous screen handler if present */ + if (previous_screen != NULL && zathura->signals.monitors_changed_handler > 0) { + g_signal_handler_disconnect(previous_screen, zathura->signals.monitors_changed_handler); + zathura->signals.monitors_changed_handler = 0; + } + if (gtk_widget_has_screen(widget)) { GdkScreen* screen = gtk_widget_get_screen(widget); - /* disconnect signal on previous screen */ - g_signal_handlers_disconnect_matched(screen, G_SIGNAL_MATCH_FUNC, 0, 0, - NULL, (gpointer) cb_monitors_changed, zathura); - /* connect to new screen */ - g_signal_connect(G_OBJECT(screen), + zathura->signals.monitors_changed_handler = g_signal_connect(G_OBJECT(screen), "monitors-changed", G_CALLBACK(cb_monitors_changed), zathura); } diff --git a/zathura/zathura.c b/zathura/zathura.c index 299b5bd..d2e2442 100644 --- a/zathura/zathura.c +++ b/zathura/zathura.c @@ -222,6 +222,9 @@ init_ui(zathura_t* zathura) g_signal_connect(G_OBJECT(zathura->ui.session->gtk.view), "screen-changed", G_CALLBACK(cb_widget_screen_changed), zathura); + /* initialize the screen-changed handler to 0 (i.e. invalid) */ + zathura->signals.monitors_changed_handler = 0; + /* page view */ zathura->ui.page_widget = gtk_grid_new(); gtk_grid_set_row_homogeneous(GTK_GRID(zathura->ui.page_widget), TRUE); diff --git a/zathura/zathura.h b/zathura/zathura.h index e05be81..22077cc 100644 --- a/zathura/zathura.h +++ b/zathura/zathura.h @@ -163,6 +163,8 @@ struct zathura_s #ifdef G_OS_UNIX guint sigterm; #endif + + gulong monitors_changed_handler; /**< Signal handler for monitors-changed */ } signals; struct