diff --git a/app/widgets/gimpcontainertreeview.c b/app/widgets/gimpcontainertreeview.c index ca44847ec6..fd49e8538d 100644 --- a/app/widgets/gimpcontainertreeview.c +++ b/app/widgets/gimpcontainertreeview.c @@ -230,7 +230,7 @@ gimp_container_tree_view_init (GimpContainerTreeView *tree_view) gimp_widget_track_monitor (GTK_WIDGET (tree_view), G_CALLBACK (gimp_container_tree_view_monitor_changed), - NULL); + NULL, NULL); } static void diff --git a/app/widgets/gimpfgbgeditor.c b/app/widgets/gimpfgbgeditor.c index ebf4d14f93..278d9e6add 100644 --- a/app/widgets/gimpfgbgeditor.c +++ b/app/widgets/gimpfgbgeditor.c @@ -195,7 +195,7 @@ gimp_fg_bg_editor_init (GimpFgBgEditor *editor) gimp_widget_track_monitor (GTK_WIDGET (editor), G_CALLBACK (gimp_fg_bg_editor_destroy_transform), - NULL); + NULL, NULL); gtk_widget_set_size_request (GTK_WIDGET (editor), 32, 24); } diff --git a/app/widgets/gimpfgbgview.c b/app/widgets/gimpfgbgview.c index 845e2d26e6..fe0d0d6ea8 100644 --- a/app/widgets/gimpfgbgview.c +++ b/app/widgets/gimpfgbgview.c @@ -98,7 +98,7 @@ gimp_fg_bg_view_init (GimpFgBgView *view) gimp_widget_track_monitor (GTK_WIDGET (view), G_CALLBACK (gimp_fg_bg_view_destroy_transform), - NULL); + NULL, NULL); } static void diff --git a/app/widgets/gimpview.c b/app/widgets/gimpview.c index 19c9b42720..57467a9d7a 100644 --- a/app/widgets/gimpview.c +++ b/app/widgets/gimpview.c @@ -190,7 +190,7 @@ gimp_view_init (GimpView *view) gimp_widget_track_monitor (GTK_WIDGET (view), G_CALLBACK (gimp_view_monitor_changed), - NULL); + NULL, NULL); } static void diff --git a/libgimpwidgets/gimpcolorarea.c b/libgimpwidgets/gimpcolorarea.c index 7ee12c72b6..1f4b87ed37 100644 --- a/libgimpwidgets/gimpcolorarea.c +++ b/libgimpwidgets/gimpcolorarea.c @@ -258,7 +258,7 @@ gimp_color_area_init (GimpColorArea *area) gimp_widget_track_monitor (GTK_WIDGET (area), G_CALLBACK (gimp_color_area_destroy_transform), - NULL); + NULL, NULL); } static void diff --git a/libgimpwidgets/gimpcolorscale.c b/libgimpwidgets/gimpcolorscale.c index 017508cdeb..67770e147b 100644 --- a/libgimpwidgets/gimpcolorscale.c +++ b/libgimpwidgets/gimpcolorscale.c @@ -183,7 +183,7 @@ gimp_color_scale_init (GimpColorScale *scale) gimp_widget_track_monitor (GTK_WIDGET (scale), G_CALLBACK (gimp_color_scale_destroy_transform), - NULL); + NULL, NULL); css = gtk_css_provider_new (); gtk_css_provider_load_from_data (css, diff --git a/libgimpwidgets/gimppreviewarea.c b/libgimpwidgets/gimppreviewarea.c index 12419d9067..a2ef669de1 100644 --- a/libgimpwidgets/gimppreviewarea.c +++ b/libgimpwidgets/gimppreviewarea.c @@ -162,7 +162,7 @@ gimp_preview_area_init (GimpPreviewArea *area) gimp_widget_track_monitor (GTK_WIDGET (area), G_CALLBACK (gimp_preview_area_destroy_transform), - NULL); + NULL, NULL); } static void diff --git a/libgimpwidgets/gimpwidgetsutils.c b/libgimpwidgets/gimpwidgetsutils.c index 3c262bca2d..3c0478f284 100644 --- a/libgimpwidgets/gimpwidgetsutils.c +++ b/libgimpwidgets/gimpwidgetsutils.c @@ -434,9 +434,10 @@ track_monitor_hierarchy_changed (GtkWidget *widget, * Since: 2.10 **/ void -gimp_widget_track_monitor (GtkWidget *widget, - GCallback monitor_changed_callback, - gpointer user_data) +gimp_widget_track_monitor (GtkWidget *widget, + GCallback monitor_changed_callback, + gpointer user_data, + GDestroyNotify user_data_destroy) { TrackMonitorData *track_data; GtkWidget *toplevel; @@ -450,7 +451,12 @@ gimp_widget_track_monitor (GtkWidget *widget, track_data->callback = (MonitorChangedCallback) monitor_changed_callback; track_data->user_data = user_data; - g_object_weak_ref (G_OBJECT (widget), (GWeakNotify) g_free, track_data); + g_object_weak_ref (G_OBJECT (widget), (GWeakNotify) g_free, + track_data); + + if (user_data_destroy) + g_object_weak_ref (G_OBJECT (widget), (GWeakNotify) user_data_destroy, + user_data); g_signal_connect (widget, "hierarchy-changed", G_CALLBACK (track_monitor_hierarchy_changed), diff --git a/libgimpwidgets/gimpwidgetsutils.h b/libgimpwidgets/gimpwidgetsutils.h index 3a4b8c9ff2..d126d03ba2 100644 --- a/libgimpwidgets/gimpwidgetsutils.h +++ b/libgimpwidgets/gimpwidgetsutils.h @@ -47,7 +47,8 @@ GdkMonitor * gimp_get_monitor_at_pointer (void); void gimp_widget_track_monitor (GtkWidget *widget, GCallback monitor_changed_callback, - gpointer user_data); + gpointer user_data, + GDestroyNotify user_data_destroy); GimpColorProfile * gimp_monitor_get_color_profile (GdkMonitor *monitor); GimpColorProfile * gimp_widget_get_color_profile (GtkWidget *widget); diff --git a/modules/color-selector-water.c b/modules/color-selector-water.c index a5809cc5f4..dd62cde611 100644 --- a/modules/color-selector-water.c +++ b/modules/color-selector-water.c @@ -202,7 +202,7 @@ colorsel_water_init (ColorselWater *water) gimp_widget_track_monitor (GTK_WIDGET (water), G_CALLBACK (colorsel_water_destroy_transform), - NULL); + NULL, NULL); } static gdouble diff --git a/modules/gimpcolorwheel.c b/modules/gimpcolorwheel.c index b11baea3d0..a7652376e3 100644 --- a/modules/gimpcolorwheel.c +++ b/modules/gimpcolorwheel.c @@ -242,7 +242,7 @@ gimp_color_wheel_init (GimpColorWheel *wheel) gimp_widget_track_monitor (GTK_WIDGET (wheel), G_CALLBACK (gimp_color_wheel_destroy_transform), - NULL); + NULL, NULL); } static void