TnyFolderMonitor *monitor;
GMutex *monitor_lock;
+ gint sort_colid[2][TNY_FOLDER_TYPE_NUM];
};
#define MODEST_HEADER_VIEW_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE((o), \
}
gboolean
-modest_header_view_set_columns (ModestHeaderView *self, const GList *columns)
+modest_header_view_set_columns (ModestHeaderView *self, const GList *columns, TnyFolderType type)
{
GtkTreeModel *sortable;
GtkTreeViewColumn *column=NULL;
renderer_comptact_flag = gtk_cell_renderer_pixbuf_new ();
renderer_compact_date = gtk_cell_renderer_text_new ();
+ g_object_set(G_OBJECT(renderer_header),
+ "ellipsize", PANGO_ELLIPSIZE_END,
+ NULL);
g_object_set(G_OBJECT(renderer_compact_date),
"xalign", 1.0,
NULL);
break;
case MODEST_HEADER_VIEW_COLUMN_RECEIVED_DATE:
- column = get_new_column (_("Received"), renderer_compact_date, TRUE,
+ column = get_new_column (_("Received"), renderer_header, TRUE,
TNY_GTK_HEADER_LIST_MODEL_DATE_RECEIVED_TIME_T_COLUMN,
TRUE,
(GtkTreeCellDataFunc)_modest_header_view_date_cell_data,
GINT_TO_POINTER(TRUE));
break;
- case MODEST_HEADER_VIEW_COLUMN_SENT_DATE:
- column = get_new_column (_("Sent"), renderer_compact_date, TRUE,
+ case MODEST_HEADER_VIEW_COLUMN_SENT_DATE:
+ column = get_new_column (_("Sent"), renderer_header, TRUE,
TNY_GTK_HEADER_LIST_MODEL_DATE_SENT_TIME_T_COLUMN,
TRUE,
(GtkTreeCellDataFunc)_modest_header_view_date_cell_data,
GINT_TO_POINTER(FALSE));
break;
+ case MODEST_HEADER_VIEW_COLUMN_COMPACT_RECEIVED_DATE:
+ column = get_new_column (_("Received"), renderer_compact_date, FALSE,
+ TNY_GTK_HEADER_LIST_MODEL_DATE_RECEIVED_TIME_T_COLUMN,
+ TRUE,
+ (GtkTreeCellDataFunc)_modest_header_view_compact_date_cell_data,
+ GINT_TO_POINTER(TRUE));
+ gtk_tree_view_column_set_fixed_width (column, 130);
+ break;
+
+ case MODEST_HEADER_VIEW_COLUMN_COMPACT_SENT_DATE:
+ column = get_new_column (_("Sent"), renderer_compact_date, FALSE,
+ TNY_GTK_HEADER_LIST_MODEL_DATE_SENT_TIME_T_COLUMN,
+ TRUE,
+ (GtkTreeCellDataFunc)_modest_header_view_compact_date_cell_data,
+ GINT_TO_POINTER(FALSE));
+ gtk_tree_view_column_set_fixed_width (column, 130);
+ break;
case MODEST_HEADER_VIEW_COLUMN_SIZE:
column = get_new_column (_("Size"), renderer_header, TRUE,
TNY_GTK_HEADER_LIST_MODEL_MESSAGE_SIZE_COLUMN,
g_return_val_if_reached(FALSE);
}
- if (sortable)
+ if (sortable)
gtk_tree_sortable_set_sort_func (GTK_TREE_SORTABLE(sortable),
col, (GtkTreeIterCompareFunc)cmp_rows,
column, NULL);
self);
gtk_tree_view_append_column (GTK_TREE_VIEW(self), column);
}
-
+
+
return TRUE;
}
modest_header_view_init (ModestHeaderView *obj)
{
ModestHeaderViewPrivate *priv;
+ guint i, j;
priv = MODEST_HEADER_VIEW_GET_PRIVATE(obj);
priv->monitor = NULL;
priv->monitor_lock = g_mutex_new ();
-
+ for (j=0; j < 2; j++)
+ for (i=0; i < TNY_FOLDER_TYPE_NUM; i++)
+ priv->sort_colid[j][i] = -1;
setup_drag_and_drop (GTK_TREE_VIEW (obj));
}
}
void
+modest_header_view_set_sort_column_id (ModestHeaderView *self, guint sort_colid, TnyFolderType type)
+{
+ ModestHeaderViewPrivate *priv;
+ ModestHeaderViewStyle style;
+
+ style = modest_header_view_get_style (self);
+ priv = MODEST_HEADER_VIEW_GET_PRIVATE(self);
+
+ priv->sort_colid[style][type] = sort_colid;
+}
+
+gint
+modest_header_view_get_sort_column_id (ModestHeaderView *self, TnyFolderType type)
+{
+ ModestHeaderViewPrivate *priv;
+ ModestHeaderViewStyle style;
+
+ style = modest_header_view_get_style (self);
+ priv = MODEST_HEADER_VIEW_GET_PRIVATE(self);
+
+ return priv->sort_colid[style][type];
+}
+
+void
modest_header_view_set_folder (ModestHeaderView *self, TnyFolder *folder)
{
ModestHeaderViewPrivate *priv;
gint t1, t2;
gint val1, val2;
gchar *s1, *s2;
- gint cmp;
-
+ gint cmp;
static int counter = 0;
+
+ g_return_val_if_fail (G_IS_OBJECT(user_data), 0);
col_id = GPOINTER_TO_INT(g_object_get_data(G_OBJECT(user_data), MODEST_HEADER_VIEW_COLUMN));
if (!(++counter % 100)) {
/* first one, we decide based on the time */
case MODEST_HEADER_VIEW_COLUMN_COMPACT_HEADER_IN:
+ case MODEST_HEADER_VIEW_COLUMN_COMPACT_RECEIVED_DATE:
case MODEST_HEADER_VIEW_COLUMN_RECEIVED_DATE:
gtk_tree_model_get (tree_model, iter1,
return t1 - t2;
case MODEST_HEADER_VIEW_COLUMN_COMPACT_HEADER_OUT:
+ case MODEST_HEADER_VIEW_COLUMN_COMPACT_SENT_DATE:
case MODEST_HEADER_VIEW_COLUMN_SENT_DATE:
gtk_tree_model_get (tree_model, iter1,
TNY_GTK_HEADER_LIST_MODEL_DATE_SENT_TIME_T_COLUMN,
{
GtkTreeSelection *selection;
GtkTreeModel *model;
- GList *selected;
+ GList *selected = NULL;
+ GtkTreePath *selected_path = NULL;
model = gtk_tree_view_get_model (GTK_TREE_VIEW (self));
if (!model)
GtkTreeIter iter;
GtkTreePath *path;
- gtk_tree_model_get_iter_first (model, &iter);
+ /* Return if the model is empty */
+ if (!gtk_tree_model_get_iter_first (model, &iter))
+ return FALSE;
+
path = gtk_tree_model_get_path (model, &iter);
gtk_tree_selection_select_path (selection, path);
gtk_tree_path_free (path);
/* Need to get the all the rows because is selection multiple */
selected = gtk_tree_selection_get_selected_rows (selection, &model);
-
- /* Scroll to first path */
- gtk_tree_view_scroll_to_cell (GTK_TREE_VIEW (self),
- (GtkTreePath *) selected->data,
- NULL,
- TRUE,
- 0.5,
- 0.0);
+ selected_path = (GtkTreePath *) selected->data;
+
+ /* Check if we need to scroll */
+ #if GTK_CHECK_VERSION(2, 8, 0) /* TODO: gtk_tree_view_get_visible_range() is only available in GTK+ 2.8 */
+ GtkTreePath *start_path = NULL;
+ GtkTreePath *end_path = NULL;
+ if (gtk_tree_view_get_visible_range (GTK_TREE_VIEW (self),
+ &start_path,
+ &end_path)) {
+
+ if ((gtk_tree_path_compare (start_path, selected_path) != -1) ||
+ (gtk_tree_path_compare (end_path, selected_path) != 1)) {
+
+ /* Scroll to first path */
+ gtk_tree_view_scroll_to_cell (GTK_TREE_VIEW (self),
+ selected_path,
+ NULL,
+ TRUE,
+ 0.5,
+ 0.0);
+ }
+ }
+ #endif /* GTK_CHECK_VERSION */
/* Frees */
g_list_foreach (selected, (GFunc) gtk_tree_path_free, NULL);