+static void
+on_header_view_model_destroyed (gpointer user_data,
+ GObject *model)
+{
+ ModestHeaderWindow *self = (ModestHeaderWindow *) user_data;
+ ModestHeaderWindowPrivate *priv = MODEST_HEADER_WINDOW_GET_PRIVATE (self);
+
+ if (g_signal_handler_is_connected (G_OBJECT (model),
+ priv->sort_column_handler)) {
+ g_signal_handler_disconnect (G_OBJECT (model),
+ priv->sort_column_handler);
+ priv->sort_column_handler = 0;
+ }
+}
+
+static void
+on_header_view_model_changed (GObject *gobject,
+ GParamSpec *arg1,
+ gpointer user_data)
+{
+ ModestHeaderWindow *self = (ModestHeaderWindow *) user_data;
+ ModestHeaderWindowPrivate *priv = MODEST_HEADER_WINDOW_GET_PRIVATE (self);
+ GtkTreeModel *model = gtk_tree_view_get_model (GTK_TREE_VIEW (gobject));
+
+ if (!model)
+ return;
+
+ /* Connect the signal. Listen to object destruction to disconnect it */
+ priv->sort_column_handler = g_signal_connect ((GObject *) model,
+ "sort-column-changed",
+ G_CALLBACK (on_sort_column_changed),
+ self);
+ g_object_weak_ref ((GObject *) model, on_header_view_model_destroyed, self);
+}
+