summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGravatar Alan Fitton <ajf@eth0.org.uk>2011-11-24 08:39:15 +0000
committerGravatar Alan Fitton <ajf@eth0.org.uk>2011-11-24 08:39:15 +0000
commit4bb1831158320d8fe3543153482f523c4fe7a82d (patch)
treed6e2adf36ef349d9df866d6e9a2f5b743a86eb2b
parentecacee36541bf3e4df775b465d5d1ecee3a65cce (diff)
hopefully fix the infrequent crash when changing filter if first+other items selected, by swapping the sorted model and filtered model in their chaining order. I think the events on the filtered model weren't being propogated to the sorted model when the selection changes.
-rw-r--r--src/trg-main-window.c26
-rw-r--r--src/trg-peers-tree-view.c2
-rw-r--r--src/trg-torrent-tree-view.c3
-rw-r--r--src/trg-tree-view.c315
-rw-r--r--src/trg-tree-view.h4
5 files changed, 139 insertions, 211 deletions
diff --git a/src/trg-main-window.c b/src/trg-main-window.c
index f7fa2e6..9788763 100644
--- a/src/trg-main-window.c
+++ b/src/trg-main-window.c
@@ -349,10 +349,10 @@ static void destroy_window(GtkWidget * w, gpointer data G_GNUC_UNUSED) {
trg_prefs_set_int(prefs, TRG_PREFS_KEY_STATES_PANED_POS, gtk_paned_get_position(GTK_PANED(priv->hpaned)),
TRG_PREFS_GLOBAL);
- trg_tree_view_persist(TRG_TREE_VIEW(priv->peersTreeView));
- trg_tree_view_persist(TRG_TREE_VIEW(priv->filesTreeView));
- trg_tree_view_persist(TRG_TREE_VIEW(priv->torrentTreeView));
- trg_tree_view_persist(TRG_TREE_VIEW(priv->trackersTreeView));
+ trg_tree_view_persist(TRG_TREE_VIEW(priv->peersTreeView), FALSE);
+ trg_tree_view_persist(TRG_TREE_VIEW(priv->filesTreeView), FALSE);
+ trg_tree_view_persist(TRG_TREE_VIEW(priv->torrentTreeView), TRUE);
+ trg_tree_view_persist(TRG_TREE_VIEW(priv->trackersTreeView), FALSE);
trg_prefs_save(prefs);
gtk_main_quit();
@@ -649,9 +649,9 @@ static gint confirm_action_dialog(GtkWindow * win,
firstNode = g_list_first(list);
gtk_tree_model_get_iter(GTK_TREE_MODEL
- (priv->sortedTorrentModel), &firstIter, firstNode->data);
+ (priv->filteredTorrentModel), &firstIter, firstNode->data);
gtk_tree_model_get(GTK_TREE_MODEL
- (priv->sortedTorrentModel), &firstIter, TORRENT_COLUMN_NAME,
+ (priv->filteredTorrentModel), &firstIter, TORRENT_COLUMN_NAME,
&name, -1);
g_list_foreach(list, (GFunc) gtk_tree_path_free, NULL);
g_list_free(list);
@@ -1134,9 +1134,9 @@ static gboolean torrent_selection_changed(GtkTreeSelection * selection,
if (firstNode) {
GtkTreeIter iter;
- if (gtk_tree_model_get_iter(priv->sortedTorrentModel, &iter,
+ if (gtk_tree_model_get_iter(priv->filteredTorrentModel, &iter,
(GtkTreePath *) firstNode->data)) {
- gtk_tree_model_get(priv->sortedTorrentModel, &iter,
+ gtk_tree_model_get(priv->filteredTorrentModel, &iter,
TORRENT_COLUMN_ID, &id, -1);
}
}
@@ -1981,17 +1981,17 @@ static GObject *trg_main_window_constructor(GType type,
g_signal_connect(priv->torrentModel, "torrent-addremove",
G_CALLBACK(on_torrent_addremove), self);
+ priv->sortedTorrentModel = gtk_tree_model_sort_new_with_model(
+ GTK_TREE_MODEL(priv->torrentModel));
+
priv->filteredTorrentModel = gtk_tree_model_filter_new(
- GTK_TREE_MODEL(priv->torrentModel), NULL);
+ GTK_TREE_MODEL(priv->sortedTorrentModel), NULL);
gtk_tree_model_filter_set_visible_func(GTK_TREE_MODEL_FILTER
(priv->filteredTorrentModel), trg_torrent_tree_view_visible_func,
self, NULL);
- priv->sortedTorrentModel = gtk_tree_model_sort_new_with_model(
- priv->filteredTorrentModel);
-
priv->torrentTreeView = trg_main_window_torrent_tree_view_new(self,
- priv->sortedTorrentModel);
+ priv->filteredTorrentModel);
g_signal_connect(priv->torrentTreeView, "key-press-event",
G_CALLBACK(torrent_tv_key_press_event), self);
g_signal_connect(priv->torrentTreeView, "popup-menu",
diff --git a/src/trg-peers-tree-view.c b/src/trg-peers-tree-view.c
index 0a3d48a..7ad0304 100644
--- a/src/trg-peers-tree-view.c
+++ b/src/trg-peers-tree-view.c
@@ -77,7 +77,7 @@ TrgPeersTreeView *trg_peers_tree_view_new(TrgPrefs *prefs, TrgPeersModel * model
GObject *obj = g_object_new(TRG_TYPE_PEERS_TREE_VIEW, NULL);
trg_tree_view_set_prefs(TRG_TREE_VIEW(obj), prefs);
gtk_tree_view_set_model(GTK_TREE_VIEW(obj), GTK_TREE_MODEL(model));
- trg_tree_view_restore_sort(TRG_TREE_VIEW(obj));
+ trg_tree_view_restore_sort(TRG_TREE_VIEW(obj), FALSE);
trg_tree_view_setup_columns(TRG_TREE_VIEW(obj));
return TRG_PEERS_TREE_VIEW(obj);
diff --git a/src/trg-torrent-tree-view.c b/src/trg-torrent-tree-view.c
index 895b386..c03b664 100644
--- a/src/trg-torrent-tree-view.c
+++ b/src/trg-torrent-tree-view.c
@@ -167,7 +167,8 @@ TrgTorrentTreeView *trg_torrent_tree_view_new(TrgPrefs *prefs, GtkTreeModel * mo
trg_tree_view_set_prefs(TRG_TREE_VIEW(obj), prefs);
gtk_tree_view_set_model(GTK_TREE_VIEW(obj), model);
trg_tree_view_setup_columns(TRG_TREE_VIEW(obj));
- trg_tree_view_restore_sort(TRG_TREE_VIEW(obj));
+
+ trg_tree_view_restore_sort(TRG_TREE_VIEW(obj), TRUE);
return TRG_TORRENT_TREE_VIEW(obj);
}
diff --git a/src/trg-tree-view.c b/src/trg-tree-view.c
index 7ee83a5..069464f 100644
--- a/src/trg-tree-view.c
+++ b/src/trg-tree-view.c
@@ -33,8 +33,7 @@
#include "trg-cell-renderer-numgteqthan.h"
enum {
- PROP_0,
- PROP_PREFS
+ PROP_0, PROP_PREFS
};
G_DEFINE_TYPE(TrgTreeView, trg_tree_view, GTK_TYPE_TREE_VIEW)
@@ -47,16 +46,15 @@ struct _TrgTreeViewPrivate {
TrgPrefs *prefs;
};
-gboolean trg_tree_view_is_column_showing(TrgTreeView *tv, gint index)
-{
+gboolean trg_tree_view_is_column_showing(TrgTreeView *tv, gint index) {
TrgTreeViewPrivate *priv = TRG_TREE_VIEW_GET_PRIVATE(tv);
GList *li;
- for (li = priv->columns; li; li = g_list_next(li))
- {
- trg_column_description *cd = (trg_column_description*)li->data;
+ for (li = priv->columns; li; li = g_list_next(li)) {
+ trg_column_description *cd = (trg_column_description*) li->data;
if (cd->model_column == index) {
- if (cd->flags & TRG_COLUMN_SHOWING)
+ if (cd->flags & TRG_COLUMN_SHOWING
+ )
return TRUE;
else
break;
@@ -66,17 +64,13 @@ gboolean trg_tree_view_is_column_showing(TrgTreeView *tv, gint index)
return FALSE;
}
-static void
-trg_tree_view_get_property(GObject * object, guint property_id,
- GValue * value, GParamSpec * pspec)
-{
+static void trg_tree_view_get_property(GObject * object, guint property_id,
+ GValue * value, GParamSpec * pspec) {
G_OBJECT_WARN_INVALID_PROPERTY_ID(object, property_id, pspec);
}
-static void
-trg_tree_view_set_property(GObject * object, guint property_id,
- const GValue * value, GParamSpec * pspec)
-{
+static void trg_tree_view_set_property(GObject * object, guint property_id,
+ const GValue * value, GParamSpec * pspec) {
TrgTreeViewPrivate *priv = TRG_TREE_VIEW_GET_PRIVATE(object);
switch (property_id) {
case PROP_PREFS:
@@ -84,26 +78,20 @@ trg_tree_view_set_property(GObject * object, guint property_id,
break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID(object, property_id, pspec);
+ break;
}
}
static GObject *trg_tree_view_constructor(GType type,
- guint
- n_construct_properties,
- GObjectConstructParam
- * construct_params)
-{
+ guint n_construct_properties, GObjectConstructParam * construct_params) {
GObject *obj = G_OBJECT_CLASS
- (trg_tree_view_parent_class)->constructor(type,
- n_construct_properties,
- construct_params);
- //TrgTreeViewPrivate *priv = TRG_TREE_VIEW_GET_PRIVATE(obj);
+ (trg_tree_view_parent_class)->constructor(type,
+ n_construct_properties, construct_params);
return obj;
}
-static JsonObject* trg_prefs_get_tree_view_props(TrgTreeView *tv)
-{
+static JsonObject* trg_prefs_get_tree_view_props(TrgTreeView *tv) {
TrgTreeViewPrivate *priv = TRG_TREE_VIEW_GET_PRIVATE(tv);
JsonObject *root = trg_prefs_get_root(priv->prefs);
const gchar *className = G_OBJECT_TYPE_NAME(tv);
@@ -128,16 +116,11 @@ static JsonObject* trg_prefs_get_tree_view_props(TrgTreeView *tv)
}
static void trg_tree_view_add_column_after(TrgTreeView * tv,
- trg_column_description * desc,
- gint64 width,
- GtkTreeViewColumn * after_col);
-
-trg_column_description *trg_tree_view_reg_column(TrgTreeView * tv,
- gint type,
- gint model_column,
- gchar * header,
- gchar * id, gint flags)
-{
+ trg_column_description * desc, gint64 width,
+ GtkTreeViewColumn * after_col);
+
+trg_column_description *trg_tree_view_reg_column(TrgTreeView * tv, gint type,
+ gint model_column, gchar * header, gchar * id, gint flags) {
TrgTreeViewPrivate *priv = TRG_TREE_VIEW_GET_PRIVATE(tv);
trg_column_description *desc = g_new0(trg_column_description, 1);
@@ -153,8 +136,7 @@ trg_column_description *trg_tree_view_reg_column(TrgTreeView * tv,
}
static trg_column_description *trg_tree_view_find_column(TrgTreeView * tv,
- const gchar * id)
-{
+ const gchar * id) {
TrgTreeViewPrivate *priv = TRG_TREE_VIEW_GET_PRIVATE(tv);
GList *li;
trg_column_description *desc;
@@ -168,37 +150,29 @@ static trg_column_description *trg_tree_view_find_column(TrgTreeView * tv,
return NULL;
}
-static void trg_tree_view_hide_column(GtkWidget * w,
- GtkTreeViewColumn * col)
-{
- trg_column_description *desc =
- g_object_get_data(G_OBJECT(col), "column-desc");
+static void trg_tree_view_hide_column(GtkWidget * w, GtkTreeViewColumn * col) {
+ trg_column_description *desc = g_object_get_data(G_OBJECT(col),
+ "column-desc");
GtkWidget *tv = gtk_tree_view_column_get_tree_view(col);
desc->flags &= ~TRG_COLUMN_SHOWING;
gtk_tree_view_remove_column(GTK_TREE_VIEW(tv), col);
}
static void trg_tree_view_add_column(TrgTreeView * tv,
- trg_column_description * desc,
- gint64 width)
-{
+ trg_column_description * desc, gint64 width) {
trg_tree_view_add_column_after(tv, desc, width, NULL);
}
static void trg_tree_view_user_add_column_cb(GtkWidget * w,
- trg_column_description * desc)
-{
+ trg_column_description * desc) {
GtkTreeViewColumn *col = g_object_get_data(G_OBJECT(w), "parent-col");
- TrgTreeView *tv =
- TRG_TREE_VIEW(gtk_tree_view_column_get_tree_view(col));
+ TrgTreeView *tv = TRG_TREE_VIEW(gtk_tree_view_column_get_tree_view(col));
trg_tree_view_add_column_after(tv, desc, -1, col);
}
-static void
-view_popup_menu(GtkButton * button, GdkEventButton * event,
- GtkTreeViewColumn * column)
-{
+static void view_popup_menu(GtkButton * button, GdkEventButton * event,
+ GtkTreeViewColumn * column) {
GtkWidget *tv = gtk_tree_view_column_get_tree_view(column);
TrgTreeViewPrivate *priv = TRG_TREE_VIEW_GET_PRIVATE(tv);
GtkWidget *menu, *menuitem;
@@ -211,9 +185,8 @@ view_popup_menu(GtkButton * button, GdkEventButton * event,
menuitem = gtk_check_menu_item_new_with_label(desc->header);
gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(menuitem), TRUE);
g_signal_connect(menuitem, "activate",
- G_CALLBACK(trg_tree_view_hide_column), column);
- gtk_widget_set_sensitive(menuitem,
- !(desc->flags & TRG_COLUMN_UNREMOVABLE));
+ G_CALLBACK(trg_tree_view_hide_column), column);
+ gtk_widget_set_sensitive(menuitem, !(desc->flags & TRG_COLUMN_UNREMOVABLE));
gtk_menu_shell_append(GTK_MENU_SHELL(menu), menuitem);
for (li = priv->columns; li; li = g_list_next(li)) {
@@ -222,22 +195,19 @@ view_popup_menu(GtkButton * button, GdkEventButton * event,
menuitem = gtk_check_menu_item_new_with_label(desc->header);
g_object_set_data(G_OBJECT(menuitem), "parent-col", column);
g_signal_connect(menuitem, "activate",
- G_CALLBACK(trg_tree_view_user_add_column_cb),
- desc);
+ G_CALLBACK(trg_tree_view_user_add_column_cb), desc);
gtk_menu_shell_append(GTK_MENU_SHELL(menu), menuitem);
}
}
gtk_widget_show_all(menu);
gtk_menu_popup(GTK_MENU(menu), NULL, NULL, NULL, NULL,
- (event != NULL) ? event->button : 0,
- gdk_event_get_time((GdkEvent *) event));
-}
+ (event != NULL) ? event->button : 0,
+ gdk_event_get_time((GdkEvent *) event));
+ }
-static gboolean
-col_onButtonPressed(GtkButton * button, GdkEventButton * event,
- GtkTreeViewColumn * col)
-{
+static gboolean col_onButtonPressed(GtkButton * button, GdkEventButton * event,
+ GtkTreeViewColumn * col) {
if (event->type == GDK_BUTTON_PRESS && event->button == 3) {
view_popup_menu(button, event, col);
return TRUE;
@@ -246,96 +216,68 @@ col_onButtonPressed(GtkButton * button, GdkEventButton * event,
return FALSE;
}
-static GtkTreeViewColumn *trg_tree_view_icontext_column_new(trg_column_description *desc,
- gchar *renderer_property)
-{
+static GtkTreeViewColumn *trg_tree_view_icontext_column_new(
+ trg_column_description *desc, gchar *renderer_property) {
GtkTreeViewColumn *column = gtk_tree_view_column_new();
GtkCellRenderer *renderer = gtk_cell_renderer_pixbuf_new();
gtk_tree_view_column_set_title(column, desc->header);
gtk_tree_view_column_pack_start(column, renderer, FALSE);
gtk_tree_view_column_set_attributes(column, renderer, renderer_property,
- desc->model_column_icon, NULL);
+ desc->model_column_icon, NULL);
renderer = gtk_cell_renderer_text_new();
gtk_tree_view_column_pack_start(column, renderer, TRUE);
gtk_tree_view_column_set_attributes(column, renderer, "text",
- desc->model_column, NULL);
+ desc->model_column, NULL);
return column;
}
static void trg_tree_view_add_column_after(TrgTreeView * tv,
- trg_column_description * desc,
- gint64 width,
- GtkTreeViewColumn * after_col)
-{
+ trg_column_description * desc, gint64 width,
+ GtkTreeViewColumn * after_col) {
GtkCellRenderer *renderer;
GtkTreeViewColumn *column = NULL;
switch (desc->type) {
case TRG_COLTYPE_TEXT:
renderer =
- desc->customRenderer ? desc->customRenderer :
- gtk_cell_renderer_text_new();
- column =
- gtk_tree_view_column_new_with_attributes(desc->header,
- renderer, "text",
- desc->model_column,
- NULL);
+ desc->customRenderer ? desc->customRenderer :
+ gtk_cell_renderer_text_new();
+ column = gtk_tree_view_column_new_with_attributes(desc->header,
+ renderer, "text", desc->model_column, NULL);
break;
case TRG_COLTYPE_SPEED:
renderer = trg_cell_renderer_speed_new();
- column =
- gtk_tree_view_column_new_with_attributes(desc->header,
- renderer,
- "speed-value",
- desc->model_column,
- NULL);
+ column = gtk_tree_view_column_new_with_attributes(desc->header,
+ renderer, "speed-value", desc->model_column, NULL);
break;
case TRG_COLTYPE_EPOCH:
renderer = trg_cell_renderer_epoch_new();
- column =
- gtk_tree_view_column_new_with_attributes(desc->header,
- renderer,
- "epoch-value",
- desc->model_column,
- NULL);
+ column = gtk_tree_view_column_new_with_attributes(desc->header,
+ renderer, "epoch-value", desc->model_column, NULL);
break;
case TRG_COLTYPE_ETA:
renderer = trg_cell_renderer_eta_new();
- column =
- gtk_tree_view_column_new_with_attributes(desc->header,
- renderer, "eta-value",
- desc->model_column,
- NULL);
+ column = gtk_tree_view_column_new_with_attributes(desc->header,
+ renderer, "eta-value", desc->model_column, NULL);
break;
case TRG_COLTYPE_SIZE:
renderer = trg_cell_renderer_size_new();
- column =
- gtk_tree_view_column_new_with_attributes(desc->header,
- renderer,
- "size-value",
- desc->model_column,
- NULL);
+ column = gtk_tree_view_column_new_with_attributes(desc->header,
+ renderer, "size-value", desc->model_column, NULL);
break;
case TRG_COLTYPE_PROG:
renderer = gtk_cell_renderer_progress_new();
- column =
- gtk_tree_view_column_new_with_attributes(desc->header,
- renderer, "value",
- desc->model_column,
- NULL);
+ column = gtk_tree_view_column_new_with_attributes(desc->header,
+ renderer, "value", desc->model_column, NULL);
break;
case TRG_COLTYPE_RATIO:
renderer = trg_cell_renderer_ratio_new();
- column =
- gtk_tree_view_column_new_with_attributes(desc->header,
- renderer,
- "ratio-value",
- desc->model_column,
- NULL);
+ column = gtk_tree_view_column_new_with_attributes(desc->header,
+ renderer, "ratio-value", desc->model_column, NULL);
break;
case TRG_COLTYPE_ICON:
column = gtk_tree_view_column_new();
@@ -344,7 +286,7 @@ static void trg_tree_view_add_column_after(TrgTreeView * tv,
gtk_tree_view_column_set_title(column, desc->header);
gtk_tree_view_column_pack_start(column, renderer, TRUE);
gtk_tree_view_column_set_attributes(column, renderer, "stock-id",
- desc->model_column, NULL);
+ desc->model_column, NULL);
break;
case TRG_COLTYPE_STOCKICONTEXT:
column = trg_tree_view_icontext_column_new(desc, "stock-id");
@@ -354,30 +296,18 @@ static void trg_tree_view_add_column_after(TrgTreeView * tv,
break;
case TRG_COLTYPE_PRIO:
renderer = trg_cell_renderer_priority_new();
- column =
- gtk_tree_view_column_new_with_attributes(desc->header,
- renderer,
- "priority-value",
- desc->model_column,
- NULL);
+ column = gtk_tree_view_column_new_with_attributes(desc->header,
+ renderer, "priority-value", desc->model_column, NULL);
break;
case TRG_COLTYPE_NUMGTZERO:
renderer = trg_cell_renderer_numgteqthan_new(1);
- column =
- gtk_tree_view_column_new_with_attributes(desc->header,
- renderer,
- "value",
- desc->model_column,
- NULL);
+ column = gtk_tree_view_column_new_with_attributes(desc->header,
+ renderer, "value", desc->model_column, NULL);
break;
case TRG_COLTYPE_NUMGTEQZERO:
renderer = trg_cell_renderer_numgteqthan_new(0);
- column =
- gtk_tree_view_column_new_with_attributes(desc->header,
- renderer,
- "value",
- desc->model_column,
- NULL);
+ column = gtk_tree_view_column_new_with_attributes(desc->header,
+ renderer, "value", desc->model_column, NULL);
break;
}
@@ -387,12 +317,10 @@ static void trg_tree_view_add_column_after(TrgTreeView * tv,
gtk_tree_view_column_set_sort_column_id(column, desc->model_column);
if (width < 0 && desc->defaultWidth > 0) {
- gtk_tree_view_column_set_sizing(column,
- GTK_TREE_VIEW_COLUMN_FIXED);
+ gtk_tree_view_column_set_sizing(column, GTK_TREE_VIEW_COLUMN_FIXED);
gtk_tree_view_column_set_fixed_width(column, desc->defaultWidth);
} else if (width > 0) {
- gtk_tree_view_column_set_sizing(column,
- GTK_TREE_VIEW_COLUMN_FIXED);
+ gtk_tree_view_column_set_sizing(column, GTK_TREE_VIEW_COLUMN_FIXED);
gtk_tree_view_column_set_fixed_width(column, width);
}
@@ -401,15 +329,14 @@ static void trg_tree_view_add_column_after(TrgTreeView * tv,
gtk_tree_view_append_column(GTK_TREE_VIEW(tv), column);
if (after_col)
- gtk_tree_view_move_column_after(GTK_TREE_VIEW(tv), column,
- after_col);
+ gtk_tree_view_move_column_after(GTK_TREE_VIEW(tv), column, after_col);
#if GTK_CHECK_VERSION( 3,0,0 )
g_signal_connect(gtk_tree_view_column_get_button(column), "button-press-event",
- G_CALLBACK(col_onButtonPressed), column);
+ G_CALLBACK(col_onButtonPressed), column);
#else
g_signal_connect(column->button, "button-press-event",
- G_CALLBACK(col_onButtonPressed), column);
+ G_CALLBACK(col_onButtonPressed), column);
#endif
if (desc->out)
@@ -418,8 +345,7 @@ static void trg_tree_view_add_column_after(TrgTreeView * tv,
desc->flags |= TRG_COLUMN_SHOWING;
}
-void trg_tree_view_persist(TrgTreeView * tv)
-{
+void trg_tree_view_persist(TrgTreeView * tv, gboolean parentIsSortable) {
JsonObject *props = trg_prefs_get_tree_view_props(tv);
GtkTreeModel *model = gtk_tree_view_get_model(GTK_TREE_VIEW(tv));
GList *cols = gtk_tree_view_get_columns(GTK_TREE_VIEW(tv));
@@ -443,8 +369,8 @@ void trg_tree_view_persist(TrgTreeView * tv)
for (li = cols; li; li = g_list_next(li)) {
GtkTreeViewColumn *col = (GtkTreeViewColumn *) li->data;
- trg_column_description *desc =
- g_object_get_data(G_OBJECT(li->data), "column-desc");
+ trg_column_description *desc = g_object_get_data(G_OBJECT(li->data),
+ "column-desc");
json_array_add_string_element(columns, desc->id);
json_array_add_int_element(widths, gtk_tree_view_column_get_width(col));
@@ -452,7 +378,10 @@ void trg_tree_view_persist(TrgTreeView * tv)
g_list_free(cols);
- gtk_tree_sortable_get_sort_column_id(GTK_TREE_SORTABLE(model), &sort_column_id, &sort_type);
+ gtk_tree_sortable_get_sort_column_id(
+ GTK_TREE_SORTABLE(parentIsSortable ? gtk_tree_model_filter_get_model(
+ GTK_TREE_MODEL_FILTER(model)) :
+ model), &sort_column_id, &sort_type);
if (json_object_has_member(props, TRG_PREFS_KEY_TV_SORT_COL))
json_object_remove_member(props, TRG_PREFS_KEY_TV_SORT_COL);
@@ -460,39 +389,41 @@ void trg_tree_view_persist(TrgTreeView * tv)
if (json_object_has_member(props, TRG_PREFS_KEY_TV_SORT_TYPE))
json_object_remove_member(props, TRG_PREFS_KEY_TV_SORT_TYPE);
- json_object_set_int_member(props, TRG_PREFS_KEY_TV_SORT_COL, (gint64)sort_column_id);
- json_object_set_int_member(props, TRG_PREFS_KEY_TV_SORT_TYPE, (gint64)sort_type);
+ json_object_set_int_member(props, TRG_PREFS_KEY_TV_SORT_COL,
+ (gint64) sort_column_id);
+ json_object_set_int_member(props, TRG_PREFS_KEY_TV_SORT_TYPE,
+ (gint64) sort_type);
}
-void trg_tree_view_restore_sort(TrgTreeView * tv)
-{
+void trg_tree_view_restore_sort(TrgTreeView * tv, gboolean parentIsSortable) {
JsonObject *props = trg_prefs_get_tree_view_props(tv);
GtkTreeModel *model = gtk_tree_view_get_model(GTK_TREE_VIEW(tv));
- if (json_object_has_member(props, TRG_PREFS_KEY_TV_SORT_COL) &&
- json_object_has_member(props, TRG_PREFS_KEY_TV_SORT_TYPE)) {
- gint64 sort_col = json_object_get_int_member(props, TRG_PREFS_KEY_TV_SORT_COL);
- gint64 sort_type = json_object_get_int_member(props, TRG_PREFS_KEY_TV_SORT_TYPE);
- gtk_tree_sortable_set_sort_column_id(GTK_TREE_SORTABLE(model),
- sort_col,
- (GtkSortType)sort_type);
+ if (json_object_has_member(props, TRG_PREFS_KEY_TV_SORT_COL)
+ && json_object_has_member(props, TRG_PREFS_KEY_TV_SORT_TYPE)) {
+ gint64 sort_col = json_object_get_int_member(props,
+ TRG_PREFS_KEY_TV_SORT_COL);
+ gint64 sort_type = json_object_get_int_member(props,
+ TRG_PREFS_KEY_TV_SORT_TYPE);
+ gtk_tree_sortable_set_sort_column_id(
+ GTK_TREE_SORTABLE(parentIsSortable ? gtk_tree_model_filter_get_model(
+ GTK_TREE_MODEL_FILTER(model)) :
+ model), sort_col, (GtkSortType) sort_type);
}
}
-void trg_tree_view_set_prefs(TrgTreeView *tv, TrgPrefs *prefs)
-{
+void trg_tree_view_set_prefs(TrgTreeView *tv, TrgPrefs *prefs) {
TrgTreeViewPrivate *priv = TRG_TREE_VIEW_GET_PRIVATE(tv);
priv->prefs = prefs;
}
-void trg_tree_view_setup_columns(TrgTreeView * tv)
-{
+void trg_tree_view_setup_columns(TrgTreeView * tv) {
TrgTreeViewPrivate *priv = TRG_TREE_VIEW_GET_PRIVATE(tv);
JsonObject *props = trg_prefs_get_tree_view_props(tv);
- if (!json_object_has_member(props, TRG_PREFS_KEY_TV_COLUMNS) ||
- !json_object_has_member(props, TRG_PREFS_KEY_TV_WIDTHS)) {
+ if (!json_object_has_member(props, TRG_PREFS_KEY_TV_COLUMNS)
+ || !json_object_has_member(props, TRG_PREFS_KEY_TV_WIDTHS)) {
GList *li;
for (li = priv->columns; li; li = g_list_next(li)) {
trg_column_description *desc = (trg_column_description *) li->data;
@@ -502,17 +433,19 @@ void trg_tree_view_setup_columns(TrgTreeView * tv)
return;
}
- GList *columns = json_array_get_elements(json_object_get_array_member(props, TRG_PREFS_KEY_TV_COLUMNS));
- GList *widths = json_array_get_elements(json_object_get_array_member(props, TRG_PREFS_KEY_TV_WIDTHS));
+ GList *columns = json_array_get_elements(
+ json_object_get_array_member(props, TRG_PREFS_KEY_TV_COLUMNS));
+ GList *widths = json_array_get_elements(
+ json_object_get_array_member(props, TRG_PREFS_KEY_TV_WIDTHS));
GList *wli = widths;
GList *cli = columns;
for (; cli; cli = g_list_next(cli)) {
- trg_column_description *desc =
- trg_tree_view_find_column(tv, json_node_get_string((JsonNode*)cli->data));
+ trg_column_description *desc = trg_tree_view_find_column(tv,
+ json_node_get_string((JsonNode*) cli->data));
if (desc) {
- gint64 width = json_node_get_int((JsonNode*)wli->data);
+ gint64 width = json_node_get_int((JsonNode*) wli->data);
trg_tree_view_add_column(tv, desc, width);
}
wli = g_list_next(wli);
@@ -522,8 +455,7 @@ void trg_tree_view_setup_columns(TrgTreeView * tv)
g_list_free(widths);
}
-GList *trg_tree_view_get_selected_refs_list(GtkTreeView * tv)
-{
+GList *trg_tree_view_get_selected_refs_list(GtkTreeView * tv) {
GtkTreeModel *model = gtk_tree_view_get_model(tv);
GtkTreeSelection *selection = gtk_tree_view_get_selection(tv);
GList *li, *selectionList;
@@ -541,9 +473,7 @@ GList *trg_tree_view_get_selected_refs_list(GtkTreeView * tv)
return refList;
}
-static void
-trg_tree_view_class_init(TrgTreeViewClass * klass)
-{
+static void trg_tree_view_class_init(TrgTreeViewClass * klass) {
GObjectClass *object_class = G_OBJECT_CLASS(klass);
g_type_class_add_private(klass, sizeof(TrgTreeViewPrivate));
@@ -552,32 +482,29 @@ trg_tree_view_class_init(TrgTreeViewClass * klass)
object_class->set_property = trg_tree_view_set_property;
object_class->constructor = trg_tree_view_constructor;
- g_object_class_install_property(object_class,
- PROP_PREFS,
- g_param_spec_object
- ("prefs", "Trg Prefs",
- "Trg Prefs",
- TRG_TYPE_PREFS,
- G_PARAM_READWRITE |
- G_PARAM_CONSTRUCT_ONLY |
- G_PARAM_STATIC_NAME |
- G_PARAM_STATIC_NICK |
- G_PARAM_STATIC_BLURB));
+ g_object_class_install_property(
+ object_class,
+ PROP_PREFS,
+ g_param_spec_object(
+ "prefs",
+ "Trg Prefs",
+ "Trg Prefs",
+ TRG_TYPE_PREFS,
+ G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY
+ | G_PARAM_STATIC_NAME | G_PARAM_STATIC_NICK
+ | G_PARAM_STATIC_BLURB));
}
-static void trg_tree_view_init(TrgTreeView * tv)
-{
+static void trg_tree_view_init(TrgTreeView * tv) {
gtk_tree_view_set_rubber_banding(GTK_TREE_VIEW(tv), TRUE);
gtk_tree_view_set_headers_clickable(GTK_TREE_VIEW(tv), TRUE);
gtk_tree_view_set_rules_hint(GTK_TREE_VIEW(tv), TRUE);
- gtk_tree_selection_set_mode(gtk_tree_view_get_selection
- (GTK_TREE_VIEW(tv)),
- GTK_SELECTION_MULTIPLE);
+ gtk_tree_selection_set_mode(gtk_tree_view_get_selection(GTK_TREE_VIEW(tv)),
+ GTK_SELECTION_MULTIPLE);
gtk_widget_set_sensitive(GTK_WIDGET(tv), FALSE);
}
-GtkWidget *trg_tree_view_new(void)
-{
+GtkWidget *trg_tree_view_new(void) {
return GTK_WIDGET(g_object_new(TRG_TYPE_TREE_VIEW, NULL));
}
diff --git a/src/trg-tree-view.h b/src/trg-tree-view.h
index 8040262..d82ad54 100644
--- a/src/trg-tree-view.h
+++ b/src/trg-tree-view.h
@@ -90,8 +90,8 @@ trg_column_description *trg_tree_view_reg_column(TrgTreeView * tv,
gchar * id, gint flags);
void trg_tree_view_setup_columns(TrgTreeView * tv);
void trg_tree_view_set_prefs(TrgTreeView *tv, TrgPrefs *prefs);
-void trg_tree_view_persist(TrgTreeView * tv);
-void trg_tree_view_restore_sort(TrgTreeView * tv);
+void trg_tree_view_persist(TrgTreeView * tv, gboolean parentIsSortable);
+void trg_tree_view_restore_sort(TrgTreeView * tv, gboolean parentIsSortable);
gboolean trg_tree_view_is_column_showing(TrgTreeView *tv, gint index);
#endif /* _TRG_TREE_VIEW_H_ */