[goffice] Fixed crash when using data labels after gtk+ behavior change. [#684889]
- From: Jean BrÃfort <jbrefort src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [goffice] Fixed crash when using data labels after gtk+ behavior change. [#684889]
- Date: Thu, 27 Sep 2012 17:11:46 +0000 (UTC)
commit b5d1bea81b6c959eca1962b9af5e42fc4036eec5
Author: Jean Brefort <jean brefort normalesup org>
Date: Thu Sep 27 19:11:45 2012 +0200
Fixed crash when using data labels after gtk+ behavior change. [#684889]
ChangeLog | 7 +++++
NEWS | 1 +
goffice/graph/gog-series-labels-prefs.ui | 42 +++++++++++++++++++++++-----
goffice/graph/gog-series-labels.c | 43 ++++++++++++++++--------------
4 files changed, 65 insertions(+), 28 deletions(-)
---
diff --git a/ChangeLog b/ChangeLog
index ce602b9..4e1c4e3 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,10 @@
+2012-09-27 Jean Brefort <jean brefort normalesup org>
+
+ * goffice/graph/gog-series-labels-prefs.ui: allow multiple selection.
+ * goffice/graph/gog-series-labels.c (used_selection_changed_cb),
+ (add_cb), (remove_cb), (gog_series_labels_update): fixed crash after gtk+
+ behavior change. [#684889]
+
2012-09-27 Chris Leonard <cjlhomeaddress gmail com>
* goffice/gtk/go-locale-sel.c: updated locales. [#682749]
diff --git a/NEWS b/NEWS
index 005ffdc..9962337 100644
--- a/NEWS
+++ b/NEWS
@@ -11,6 +11,7 @@ Jean:
* Don't crash when no valid data is available for histograms. [#684047]
* Clip histograms to the plot area. [#684195]
* Fix backplane position when data are nearly all the same. [#684599]
+ * Fixed crash when using data labels after gtk+ behavior change. [#684889]
--------------------------------------------------------------------------
goffice 0.9.6:
diff --git a/goffice/graph/gog-series-labels-prefs.ui b/goffice/graph/gog-series-labels-prefs.ui
index f444d7a..b3f3582 100644
--- a/goffice/graph/gog-series-labels-prefs.ui
+++ b/goffice/graph/gog-series-labels-prefs.ui
@@ -9,6 +9,11 @@
<column type="guint"/>
</columns>
</object>
+ <object class="GtkAdjustment" id="offset-adj">
+ <property name="upper">10</property>
+ <property name="step_increment">1</property>
+ <property name="page_increment">10</property>
+ </object>
<object class="GtkListStore" id="used-list">
<columns>
<!-- column-name text -->
@@ -17,11 +22,6 @@
<column type="guint"/>
</columns>
</object>
- <object class="GtkAdjustment" id="offset-adj">
- <property name="upper">10</property>
- <property name="step_increment">1</property>
- <property name="page_increment">10</property>
- </object>
<object class="GtkGrid" id="series-labels-prefs">
<property name="visible">True</property>
<property name="can_focus">False</property>
@@ -104,6 +104,7 @@
</child>
<child>
<object class="GtkButton" id="raise">
+ <property name="use_action_appearance">False</property>
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">True</property>
@@ -126,6 +127,7 @@
</child>
<child>
<object class="GtkButton" id="add">
+ <property name="use_action_appearance">False</property>
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">True</property>
@@ -148,6 +150,7 @@
</child>
<child>
<object class="GtkButton" id="remove">
+ <property name="use_action_appearance">False</property>
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">True</property>
@@ -170,6 +173,7 @@
</child>
<child>
<object class="GtkButton" id="lower">
+ <property name="use_action_appearance">False</property>
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">True</property>
@@ -195,9 +199,11 @@
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="model">available-list</property>
- <property name="search_column">0</property>
+ <property name="search_column">5</property>
<child internal-child="selection">
- <object class="GtkTreeSelection" id="treeview-selection"/>
+ <object class="GtkTreeSelection" id="treeview-selection">
+ <property name="mode">multiple</property>
+ </object>
</child>
</object>
<packing>
@@ -214,7 +220,9 @@
<property name="model">used-list</property>
<property name="search_column">0</property>
<child internal-child="selection">
- <object class="GtkTreeSelection" id="treeview-selection1"/>
+ <object class="GtkTreeSelection" id="treeview-selection1">
+ <property name="mode">multiple</property>
+ </object>
</child>
</object>
<packing>
@@ -237,5 +245,23 @@
<property name="height">1</property>
</packing>
</child>
+ <child>
+ <placeholder/>
+ </child>
+ <child>
+ <placeholder/>
+ </child>
+ <child>
+ <placeholder/>
+ </child>
+ <child>
+ <placeholder/>
+ </child>
+ <child>
+ <placeholder/>
+ </child>
+ <child>
+ <placeholder/>
+ </child>
</object>
</interface>
diff --git a/goffice/graph/gog-series-labels.c b/goffice/graph/gog-series-labels.c
index dc4fe28..463895d 100644
--- a/goffice/graph/gog-series-labels.c
+++ b/goffice/graph/gog-series-labels.c
@@ -141,9 +141,8 @@ used_selection_changed_cb (struct SeriesLabelsState *state)
&GOG_DATA_LABEL (state->labels)->format:
&GOG_SERIES_LABELS (state->labels)->format;
g_free (*format);
- *format = NULL;
+ *format = strdup ("");;
if (gtk_tree_model_get_iter_first (model, &iter)) {
- GtkTreeModel *model = GTK_TREE_MODEL (state->used_list);
/* if the first row is not selected and a second row exists, set the up button sensitive */
first = last = iter;
gtk_widget_set_sensitive (state->raise,
@@ -160,29 +159,19 @@ used_selection_changed_cb (struct SeriesLabelsState *state)
gtk_tree_model_get (model, &iter, 1, &dim, -1);
switch (dim) {
case -1:
- new_format = (*format)?
- g_strconcat (*format, "%s%c", NULL):
- g_strdup ("%c");
+ new_format = g_strconcat (*format, "%s%c", NULL);
break;
case -2:
- new_format = (*format)?
- g_strconcat (*format, "%s%l", NULL):
- g_strdup ("%l");
+ new_format = g_strconcat (*format, "%s%l", NULL);
break;
case -3:
- new_format = (*format)?
- g_strconcat (*format, "%s%n", NULL):
- g_strdup ("%n");
+ new_format = g_strconcat (*format, "%s%n", NULL);
break;
case -4:
- new_format = (*format)?
- g_strconcat (*format, "%s%p", NULL):
- g_strdup ("%p");
+ new_format = g_strconcat (*format, "%s%p", NULL);
break;
default:
- new_format = (*format)?
- g_strdup_printf ("%s%%s%%%d", *format, dim):
- g_strdup_printf ("%%%d", dim);
+ new_format = g_strdup_printf ("%s%%s%%%d", *format, dim);
}
g_free (*format);
*format = new_format;
@@ -208,9 +197,10 @@ used_selection_changed_cb (struct SeriesLabelsState *state)
static void
add_cb (G_GNUC_UNUSED GtkButton *btn, struct SeriesLabelsState *state)
{
- GtkTreeIter iter, add_iter;
+ GtkTreeIter iter, add_iter, next;
char *name;
int id;
+ gboolean next_selected;
gtk_tree_model_get_iter_first (GTK_TREE_MODEL (state->avail_list), &iter);
/* we don't need to check if the iter is valid since otherwise,
the button would be unsensitive */
@@ -222,8 +212,13 @@ add_cb (G_GNUC_UNUSED GtkButton *btn, struct SeriesLabelsState *state)
gtk_list_store_set (state->used_list, &add_iter,
0, name, 1, id, -1);
g_free (name);
+ next = iter;
+ next_selected = (gtk_tree_model_iter_next (GTK_TREE_MODEL (state->avail_list), &next)
+ && gtk_tree_selection_iter_is_selected (state->avail_sel, &next));
if (!gtk_list_store_remove (state->avail_list, &iter))
break;
+ if (!next_selected)
+ gtk_tree_selection_unselect_iter (state->avail_sel, &iter);
} else if (!gtk_tree_model_iter_next (GTK_TREE_MODEL (state->avail_list), &iter))
break;
}
@@ -234,9 +229,10 @@ add_cb (G_GNUC_UNUSED GtkButton *btn, struct SeriesLabelsState *state)
static void
remove_cb (G_GNUC_UNUSED GtkButton *btn, struct SeriesLabelsState *state)
{
- GtkTreeIter iter, add_iter;
+ GtkTreeIter iter, add_iter, next;
char *name;
int id;
+ gboolean next_selected;
gtk_tree_model_get_iter_first (GTK_TREE_MODEL (state->used_list), &iter);
/* we don't need to check if the iter is valid since otherwise,
the button would be unsensitive */
@@ -248,8 +244,13 @@ remove_cb (G_GNUC_UNUSED GtkButton *btn, struct SeriesLabelsState *state)
gtk_list_store_set (state->avail_list, &add_iter,
0, name, 1, id, -1);
g_free (name);
+ next = iter;
+ next_selected = (gtk_tree_model_iter_next (GTK_TREE_MODEL (state->used_list), &next)
+ && gtk_tree_selection_iter_is_selected (state->used_sel, &next));
if (!gtk_list_store_remove (state->used_list, &iter))
break;
+ if (!next_selected)
+ gtk_tree_selection_unselect_iter (state->used_sel, &iter);
} else if (!gtk_tree_model_iter_next (GTK_TREE_MODEL (state->used_list), &iter))
break;
}
@@ -1221,7 +1222,9 @@ gog_series_labels_update (GogObject *obj)
case 0: /* protect from an unexpected string end */
break;
case 'c':
- next = go_data_get_vector_string (labels->custom_labels[0].data, i);
+ next = GO_IS_DATA (labels->custom_labels[0].data)?
+ go_data_get_vector_string (labels->custom_labels[0].data, i):
+ NULL;
if (next) {
index = str->len;
g_string_append (str, next);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]