justification_factor = -1;
else
justification_factor = 1;
- y = (clip_rectangle->y + (clip_rectangle->height - PM_SIZE) / 2 -
- (clip_rectangle->height + 1) % 2);
+ if (!GTK_CLIST_ROW_HEIGHT_SET(GTK_CLIST(clist)))
+ y = (clip_rectangle->y + (clip_rectangle->height - PM_SIZE) / 2 -
+ (clip_rectangle->height + 1) % 2);
+ else
+ y = (clip_rectangle->y + (clip_rectangle->height/2 - PM_SIZE) / 2 -
+ (clip_rectangle->height/2 + 1) % 2);
if (!ctree_row->children)
{
return offset;
}
+static gboolean filter_fg (PangoAttribute *attribute, gpointer data)
+{
+ const PangoAttrClass *klass = attribute->klass;
+ if (klass->type == PANGO_ATTR_FOREGROUND)
+ return TRUE;
+
+ return FALSE;
+}
+
static PangoLayout *
sc_gtk_clist_create_cell_layout (GtkCList *clist,
GtkCListRow *clist_row,
if (!text)
return NULL;
- layout = gtk_widget_create_pango_layout (GTK_WIDGET (clist),
- ((cell->type == GTK_CELL_PIXTEXT) ?
- GTK_CELL_PIXTEXT (*cell)->text :
- GTK_CELL_TEXT (*cell)->text));
- pango_layout_set_font_description (layout, style->font_desc);
+ if (!GTK_SCTREE(clist)->use_markup[column]) {
+ layout = gtk_widget_create_pango_layout (GTK_WIDGET (clist),
+ ((cell->type == GTK_CELL_PIXTEXT) ?
+ GTK_CELL_PIXTEXT (*cell)->text :
+ GTK_CELL_TEXT (*cell)->text));
+ pango_layout_set_font_description (layout, style->font_desc);
+ } else {
+ PangoContext *context = gtk_widget_get_pango_context (GTK_WIDGET(clist));
+ layout = pango_layout_new (context);
+ pango_layout_set_markup (layout, text, -1);
+ pango_layout_set_font_description (layout, style->font_desc);
+ if (clist_row->state == GTK_STATE_SELECTED) {
+ /* for selected row, we should remove any forced foreground color
+ * or it looks like shit */
+ PangoAttrList *list = pango_layout_get_attributes(layout);
+ PangoAttrList *rem = pango_attr_list_filter(list, filter_fg, NULL);
+ if (rem)
+ pango_attr_list_unref(rem);
+ }
+ }
return layout;
if (i != ctree->tree_column)
{
+ int start_y = (clip_rectangle.height - height) / 2;
+ if (GTK_CLIST_ROW_HEIGHT_SET(GTK_CLIST(clist)))
+ start_y = (clip_rectangle.height/2 - height) / 2;
+
offset += clist_row->cell[i].horizontal;
switch (clist_row->cell[i].type)
{
GTK_CELL_PIXMAP (clist_row->cell[i])->mask,
offset,
clip_rectangle.y + clist_row->cell[i].vertical +
- (clip_rectangle.height - height) / 2,
+ start_y,
pixmap_width, height);
break;
case GTK_CELL_PIXTEXT:
GTK_CELL_PIXTEXT (clist_row->cell[i])->mask,
offset,
clip_rectangle.y + clist_row->cell[i].vertical +
- (clip_rectangle.height - height) / 2,
+ start_y,
pixmap_width, height);
offset += GTK_CELL_PIXTEXT (clist_row->cell[i])->spacing;
cell = GTK_CELL_PIXTEXT (tree_row->row.cell[ctree->tree_column]);
- yu = (ROW_TOP_YPIXEL (clist, row) + (clist->row_height - PM_SIZE) / 2 -
+ if (!GTK_CLIST_ROW_HEIGHT_SET(GTK_CLIST(clist)))
+ yu = (ROW_TOP_YPIXEL (clist, row) + (clist->row_height - PM_SIZE) / 2 -
(clist->row_height - 1) % 2);
+ else
+ yu = (ROW_TOP_YPIXEL (clist, row) + (clist->row_height/2 - PM_SIZE) / 2 -
+ (clist->row_height/2 - 1) % 2);
#ifndef MAEMO
if (clist->column[ctree->tree_column].justification == GTK_JUSTIFY_RIGHT)
GTK_SCTREE(widget)->show_stripes = TRUE;
GTK_SCTREE(widget)->always_expand_recursively = TRUE;
+ GTK_SCTREE(widget)->force_additive_sel = FALSE;
+
+ GTK_SCTREE(widget)->use_markup = g_new0(gboolean, columns);
return widget;
}
+void gtk_sctree_set_use_markup (GtkSCTree *sctree,
+ int column,
+ gboolean markup)
+{
+ gint columns = 0;
+ GValue value = { 0 };
+
+ g_return_if_fail(GTK_IS_SCTREE(sctree));
+
+ g_value_init (&value, G_TYPE_INT);
+ g_object_get_property (G_OBJECT (sctree), "n-columns", &value);
+ columns = g_value_get_int (&value);
+ g_value_unset (&value);
+
+ g_return_if_fail(column < columns);
+
+ sctree->use_markup[column] = markup;
+}
+
void gtk_sctree_select (GtkSCTree *sctree, GtkCTreeNode *node)
{
select_row(sctree,
#define SUMMARY_COL_LOCKED_WIDTH 13
#define SUMMARY_COL_MIME_WIDTH 11
-
+static int normal_row_height = -1;
static GtkStyle *bold_style;
static GtkStyle *bold_marked_style;
static GtkStyle *bold_deleted_style;
break;
}
+ summary_set_column_order(summaryview);
+ if (prefs_common.layout_mode == VERTICAL_LAYOUT) {
+ gtk_clist_set_row_height(GTK_CLIST(summaryview->ctree), 2*normal_row_height + 2);
+ } else {
+ gtk_clist_set_row_height(GTK_CLIST(summaryview->ctree), 0);
+ }
gtk_widget_unref(summaryview->hbox_l);
gtk_widget_unref(summaryview->statlabel_msgs);
quicksearch_relayout(summaryview->quicksearch);
gint *col_pos = summaryview->col_pos;
const gchar *msgid = msginfo->msgid;
GHashTable *msgid_table = summaryview->msgid_table;
-
+ gboolean vert = (prefs_common.layout_mode == VERTICAL_LAYOUT);
+
summary_set_header(summaryview, text, msginfo);
gtk_sctree_set_node_info(ctree, cnode, text[col_pos[S_COL_SUBJECT]], 2,
if (summaryview->col_state[summaryview->col_pos[S_COL_TAGS]].visible)
SET_TEXT(S_COL_TAGS);
+ if (vert)
+ g_free(text[summaryview->col_pos[S_COL_SUBJECT]]);
+
#undef SET_TEXT
GTKUT_CTREE_NODE_SET_ROW_DATA(cnode, msginfo);
GHashTable *msgid_table;
GHashTable *subject_table = NULL;
GSList * cur;
+ gboolean vert = (prefs_common.layout_mode == VERTICAL_LAYOUT);
+
START_TIMING("");
if (!mlist) return;
(ctree, NULL, node, text, 2,
NULL, NULL, NULL, NULL,
FALSE, FALSE);
+ if (vert)
+ g_free(text[summaryview->col_pos[S_COL_SUBJECT]]);
GTKUT_CTREE_NODE_SET_ROW_DATA(node, msginfo);
summary_set_marks_func(ctree, node, summaryview);
gint *col_pos = summaryview->col_pos;
gchar *from_text = NULL, *to_text = NULL, *tags_text = NULL;
gboolean should_swap = FALSE;
+ gboolean vert = (prefs_common.layout_mode == VERTICAL_LAYOUT);
+ static gchar *color_dim_rgb = NULL;
+ if (!color_dim_rgb)
+ color_dim_rgb = gdk_color_to_string(&summaryview->color_dim);
text[col_pos[S_COL_FROM]] = "";
text[col_pos[S_COL_TO]] = "";
text[col_pos[S_COL_TAGS]] = "";
/* slow! */
- if (summaryview->col_state[summaryview->col_pos[S_COL_DATE]].visible) {
+ if (summaryview->col_state[summaryview->col_pos[S_COL_DATE]].visible || vert) {
if (msginfo->date_t) {
procheader_date_get_localtime(date_modified,
sizeof(date_modified),
else
text[col_pos[S_COL_SUBJECT]] = msginfo->subject ? msginfo->subject :
_("(No Subject)");
+ if (vert) {
+ gchar *tmp = g_markup_printf_escaped(_("%s\n<span color='%s' style='italic'>From: %s, on %s</span>"),
+ text[col_pos[S_COL_SUBJECT]],
+ color_dim_rgb,
+ text[col_pos[S_COL_FROM]],
+ text[col_pos[S_COL_DATE]]);
+ text[col_pos[S_COL_SUBJECT]] = tmp;
+ }
}
static void summary_display_msg(SummaryView *summaryview, GtkCTreeNode *row)
static gchar *summaryview_get_tooltip_text(SummaryView *summaryview, MsgInfo *info, gint column)
{
MsgFlags flags;
-
if (!info)
return NULL;
gchar *formatted = NULL;
MsgInfo *info = NULL;
GdkRectangle rect;
+ gboolean vert = (prefs_common.layout_mode == VERTICAL_LAYOUT);
if (!prefs_common.show_tooltips)
return FALSE;
formatted = g_strdup(text);
g_strstrip(formatted);
-
- gtk_tooltip_set_text (tooltip, formatted);
+
+ if (!vert)
+ gtk_tooltip_set_text (tooltip, formatted);
+ else
+ gtk_tooltip_set_markup (tooltip, formatted);
g_free(formatted);
rect.x = x - 2;
gchar *titles[N_SUMMARY_COLS];
SummaryColumnType type;
gint pos;
+ gboolean vert = (prefs_common.layout_mode == VERTICAL_LAYOUT);
memset(titles, 0, sizeof(titles));
ctree = gtk_sctree_new_with_titles
(N_SUMMARY_COLS, col_pos[S_COL_SUBJECT], titles);
+ /* get normal row height */
+ gtk_clist_set_row_height(GTK_CLIST(ctree), 0);
+ normal_row_height = GTK_CLIST(ctree)->row_height;
+
if (prefs_common.show_col_headers == FALSE)
gtk_clist_column_titles_hide(GTK_CLIST(ctree));
for (pos = 0; pos < N_SUMMARY_COLS; pos++) {
GTK_WIDGET_UNSET_FLAGS(GTK_CLIST(ctree)->column[pos].button,
GTK_CAN_FOCUS);
- gtk_clist_set_column_visibility
- (GTK_CLIST(ctree), pos, col_state[pos].visible);
+ if ((pos == summaryview->col_pos[S_COL_FROM] ||
+ pos == summaryview->col_pos[S_COL_DATE]) && vert)
+ gtk_clist_set_column_visibility
+ (GTK_CLIST(ctree), pos, FALSE);
+ else
+ gtk_clist_set_column_visibility
+ (GTK_CLIST(ctree), pos, col_state[pos].visible);
}
+ gtk_sctree_set_use_markup(GTK_SCTREE(ctree), summaryview->col_pos[S_COL_SUBJECT], vert);
+
/* connect signal to the buttons for sorting */
#define CLIST_BUTTON_SIGNAL_CONNECT(col, func) \
g_signal_connect \