[gnumeric] Avoid crashing after destroying a SheetWidgetAdjustment associated widget.
- From: Jean Bréfort <jbrefort src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnumeric] Avoid crashing after destroying a SheetWidgetAdjustment associated widget.
- Date: Fri, 9 Aug 2013 16:57:29 +0000 (UTC)
commit 5a47a8176bb94ca0433067a337c6457628b4c4e1
Author: Jean Brefort <jean brefort normalesup org>
Date: Fri Aug 9 18:56:14 2013 +0200
Avoid crashing after destroying a SheetWidgetAdjustment associated widget.
ChangeLog | 8 ++++++++
NEWS | 2 ++
src/sheet-object-widget.c | 14 ++++++++++++++
3 files changed, 24 insertions(+), 0 deletions(-)
---
diff --git a/ChangeLog b/ChangeLog
index c361179..3b18cce 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,11 @@
+2013-08-09 Jean Brefort <jean brefort normalesup org>
+
+ * src/sheet-object-widget.c (cb_range_destroyed),
+ (sheet_widget_scrollbar_create_widget),
+ (sheet_widget_spinbutton_create_widget),
+ (sheet_widget_slider_create_widget): avoid crashing after destroying a
+ SheetWidgetAdjustment associated widget. [see Gtk+ bug #705677]
+
2013-08-09 Morten Welinder <terra gnome org>
* src/sheet-object-widget.c (sheet_widget_button_draw_cairo): Use
diff --git a/NEWS b/NEWS
index efe65bb..7bb5b41 100644
--- a/NEWS
+++ b/NEWS
@@ -27,6 +27,8 @@ Jean:
* Fix export of scatter/bubble plots to xls. [#705311]
* Fix crash when importing fuzzed chart from xls. [#705353]
* Accept <graph:Type> nodes in guppi graphs. [Debian #718594]
+ * Avoid crashing after destroying a SheetWidgetAdjustment associated widget.
+ [see Gtk+ bug #705677]
Morten:
* Fix crazy parsing problem. [#704109] [#704140]
diff --git a/src/sheet-object-widget.c b/src/sheet-object-widget.c
index a184d37..3351371 100644
--- a/src/sheet-object-widget.c
+++ b/src/sheet-object-widget.c
@@ -1286,6 +1286,14 @@ enum {
static GType sheet_widget_adjustment_get_type (void);
static void
+cb_range_destroyed (GtkWidget *w, SheetWidgetAdjustment *swa)
+{
+ GObject *accessible = G_OBJECT (gtk_widget_get_accessible (w));
+ if (accessible)
+ g_signal_handlers_disconnect_by_data (swa->adjustment, accessible);
+}
+
+static void
sheet_widget_adjustment_set_value (SheetWidgetAdjustment *swa, double new_val)
{
if (swa->being_updated)
@@ -1866,6 +1874,8 @@ sheet_widget_scrollbar_create_widget (SheetObjectWidget *sow)
g_signal_connect (G_OBJECT (bar),
"value_changed",
G_CALLBACK (cb_adjustment_widget_value_changed), swa);
+ g_signal_connect (G_OBJECT (bar), "destroy",
+ G_CALLBACK (cb_range_destroyed), swa);
swa->being_updated = FALSE;
return bar;
@@ -1971,6 +1981,8 @@ sheet_widget_spinbutton_create_widget (SheetObjectWidget *sow)
g_signal_connect (G_OBJECT (spinbutton),
"value_changed",
G_CALLBACK (cb_adjustment_widget_value_changed), swa);
+ g_signal_connect (G_OBJECT (spinbutton), "destroy",
+ G_CALLBACK (cb_range_destroyed), swa);
swa->being_updated = FALSE;
return spinbutton;
}
@@ -2075,6 +2087,8 @@ sheet_widget_slider_create_widget (SheetObjectWidget *sow)
g_signal_connect (G_OBJECT (slider),
"value_changed",
G_CALLBACK (cb_adjustment_widget_value_changed), swa);
+ g_signal_connect (G_OBJECT (slider), "destroy",
+ G_CALLBACK (cb_range_destroyed), swa);
swa->being_updated = FALSE;
return slider;
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]