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;
}
}
+static void gtk_sctree_finalize(GObject *object)
+{
+ GtkSCTree *sctree = GTK_SCTREE(object);
+ g_free(sctree->use_markup);
+ sctree->use_markup = NULL;
+ G_OBJECT_CLASS (parent_class)->finalize (object);
+}
+
/* Standard class initialization function */
static void
gtk_sctree_class_init (GtkSCTreeClass *klass)
{
+ GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
GtkObjectClass *object_class;
GtkWidgetClass *widget_class;
GtkCListClass *clist_class;
widget_class->drag_motion = gtk_sctree_drag_motion;
widget_class->drag_drop = gtk_sctree_drag_drop;
widget_class->drag_data_received = gtk_sctree_drag_data_received;
+
+ gobject_class->finalize = gtk_sctree_finalize;
}
/* Standard object initialization function */
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
+#ifndef GENERIC_UMPC
if (clist->column[ctree->tree_column].justification == GTK_JUSTIFY_RIGHT)
xl = (clist->column[ctree->tree_column].area.x +
clist->column[ctree->tree_column].area.width - 1 + clist->hoffset -
/* This is the same threshold value that is used in gtkdnd.c */
+#ifndef GENERIC_UMPC
+#define THRESHOLD 3
+#else
+#define THRESHOLD 8
+#endif
if (MAX (ABS (sctree->dnd_press_x - event->x),
- ABS (sctree->dnd_press_y - event->y)) <= 3)
+ ABS (sctree->dnd_press_y - event->y)) <= THRESHOLD)
return FALSE;
/* Handle any pending selections */
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,