[Xfce4-commits] <exo:stephan/icon-bar-improvements> Add API required for ristretto integration
Stephan Arts
noreply at xfce.org
Sun Jan 29 22:14:01 CET 2012
Updating branch refs/heads/stephan/icon-bar-improvements
to 743e2dfc052b1d730e260976befa1a37d3eef260 (commit)
from fb6cb01b830a93dc0cdd10ea248e7a8e6c2b8a57 (commit)
commit 743e2dfc052b1d730e260976befa1a37d3eef260
Author: Stephan Arts <stephan at xfce.org>
Date: Sat Jan 14 23:00:02 2012 +0100
Add API required for ristretto integration
exo/exo-icon-bar.c | 145 +++++++++++++++++++++++++++++++++++++++++++++++++---
exo/exo-icon-bar.h | 10 ++++
exo/exo.symbols | 4 ++
3 files changed, 152 insertions(+), 7 deletions(-)
diff --git a/exo/exo-icon-bar.c b/exo/exo-icon-bar.c
index a4fac0b..21e390a 100644
--- a/exo/exo-icon-bar.c
+++ b/exo/exo-icon-bar.c
@@ -103,6 +103,7 @@ enum
PROP_TEXT_COLUMN,
PROP_MODEL,
PROP_ACTIVE,
+ PROP_SHOW_TEXT,
};
enum
@@ -222,6 +223,8 @@ struct _ExoIconBarPrivate
GtkTreeModel *model;
PangoLayout *layout;
+
+ gboolean show_text;
};
@@ -342,6 +345,23 @@ exo_icon_bar_class_init (ExoIconBarClass *klass)
-1, G_MAXINT, -1,
EXO_PARAM_READWRITE));
+ /**
+ * ExoIconBar:show-text:
+ *
+ * Show text under icon.
+ *
+ * Allowed values: TRUE, FALSE
+ *
+ * Default value: TRUE
+ **/
+ g_object_class_install_property (gobject_class,
+ PROP_SHOW_TEXT,
+ g_param_spec_boolean ("show-text",
+ _("Show Text"),
+ _("Show Text"),
+ TRUE,
+ EXO_PARAM_READWRITE));
+
gtk_widget_class_install_style_property (gtkwidget_class,
g_param_spec_boxed ("active-item-fill-color",
_("Active item fill color"),
@@ -430,9 +450,14 @@ exo_icon_bar_init (ExoIconBar *icon_bar)
icon_bar->priv->orientation = GTK_ORIENTATION_VERTICAL;
icon_bar->priv->pixbuf_column = -1;
icon_bar->priv->text_column = -1;
+ icon_bar->priv->show_text = TRUE;
icon_bar->priv->layout = gtk_widget_create_pango_layout (GTK_WIDGET (icon_bar), NULL);
pango_layout_set_width (icon_bar->priv->layout, -1);
+ pango_layout_set_wrap (icon_bar->priv->layout,
+ PANGO_WRAP_WORD_CHAR);
+ pango_layout_set_ellipsize (icon_bar->priv->layout,
+ PANGO_ELLIPSIZE_END);
GTK_WIDGET_UNSET_FLAGS (icon_bar, GTK_CAN_FOCUS);
@@ -495,6 +520,10 @@ exo_icon_bar_get_property (GObject *object,
g_value_set_int (value, exo_icon_bar_get_active (icon_bar));
break;
+ case PROP_SHOW_TEXT:
+ g_value_set_boolean (value, exo_icon_bar_get_show_text (icon_bar));
+ break;
+
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
break;
@@ -533,6 +562,10 @@ exo_icon_bar_set_property (GObject *object,
exo_icon_bar_set_active (icon_bar, g_value_get_int (value));
break;
+ case PROP_SHOW_TEXT:
+ exo_icon_bar_set_show_text (icon_bar, g_value_get_boolean (value));
+ break;
+
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
break;
@@ -648,7 +681,7 @@ exo_icon_bar_size_request (GtkWidget *widget,
{
item = lp->data;
exo_icon_bar_calculate_item_size (icon_bar, item);
-
+ g_debug("%d:%d", item->width, item->height);
if (item->width > max_width)
max_width = item->width;
if (item->height > max_height)
@@ -817,7 +850,9 @@ exo_icon_bar_button_press (GtkWidget *widget,
{
item = exo_icon_bar_get_item_at_pos (icon_bar, event->x, event->y);
if (G_LIKELY (item != NULL && item != icon_bar->priv->active_item))
- exo_icon_bar_set_active (icon_bar, item->index);
+ {
+ exo_icon_bar_set_active (icon_bar, item->index);
+ }
}
return TRUE;
@@ -988,8 +1023,16 @@ exo_icon_bar_paint_item (ExoIconBar *icon_bar,
y = icon_bar->priv->item_height * item->index;
px = (icon_bar->priv->item_width - item->pixbuf_width) / 2 + focus_pad + focus_width;
- py = (icon_bar->priv->item_height - (item->pixbuf_height + item->layout_height + ICON_TEXT_PADDING)) / 2
- + icon_bar->priv->item_height * item->index + focus_pad + focus_width;
+ if (icon_bar->priv->text_column != -1 && icon_bar->priv->show_text == TRUE)
+ {
+ py = (icon_bar->priv->item_height - (item->pixbuf_height + item->layout_height + ICON_TEXT_PADDING)) / 2
+ + icon_bar->priv->item_height * item->index + focus_pad + focus_width;
+ }
+ else
+ {
+ py = (icon_bar->priv->item_height - (item->pixbuf_height)) / 2
+ + icon_bar->priv->item_height * item->index + focus_pad + focus_width;
+ }
lx = (icon_bar->priv->item_width - (item->layout_width + ICON_TEXT_PADDING)) / 2 + focus_pad;
ly = py + item->pixbuf_height + ICON_TEXT_PADDING;
}
@@ -1000,8 +1043,16 @@ exo_icon_bar_paint_item (ExoIconBar *icon_bar,
px = (icon_bar->priv->item_width - item->pixbuf_width) / 2 + focus_pad + focus_width
+ icon_bar->priv->item_width * item->index;
- py = (icon_bar->priv->item_height - (item->pixbuf_height + item->layout_height)) / 2
- + focus_pad + focus_width;
+ if (icon_bar->priv->text_column != -1 && icon_bar->priv->show_text == TRUE)
+ {
+ py = (icon_bar->priv->item_height - (item->pixbuf_height + item->layout_height)) / 2
+ + focus_pad + focus_width;
+ }
+ else
+ {
+ py = (icon_bar->priv->item_height - (item->pixbuf_height)) / 2
+ + focus_pad + focus_width;
+ }
lx = (icon_bar->priv->item_width - (item->layout_width)) / 2 + x;
ly = py + item->pixbuf_height + ICON_TEXT_PADDING;
}
@@ -1096,7 +1147,7 @@ exo_icon_bar_paint_item (ExoIconBar *icon_bar,
}
}
- if (icon_bar->priv->text_column != -1)
+ if (icon_bar->priv->text_column != -1 && icon_bar->priv->show_text == TRUE)
{
exo_icon_bar_update_item_text (icon_bar, item);
@@ -1207,6 +1258,7 @@ exo_icon_bar_calculate_item_size (ExoIconBar *icon_bar,
+ 2 * (focus_width + focus_pad);
item->height = item->layout_height + 2 * (focus_width + focus_pad + ICON_TEXT_PADDING)
+ item->pixbuf_height;
+
}
@@ -1883,7 +1935,86 @@ exo_icon_bar_set_active_iter (ExoIconBar *icon_bar,
}
}
+gint
+exo_icon_bar_get_item_width (ExoIconBar *icon_bar)
+{
+ return -1;
+}
+
+void
+exo_icon_bar_set_item_width (ExoIconBar *icon_bar,
+ gint item_width)
+{
+ pango_layout_set_width (icon_bar->priv->layout,
+ item_width*PANGO_SCALE);
+ return;
+}
+
+/**
+ * exo_icon_bar_set_show_text:
+ * @icon_bar : An #ExoIconBar.
+ * @show_text : TRUE if text should be visible
+ * or FALSE if text is hidden
+ *
+ * Toggles the visibility of the text-label
+ **/
+void
+exo_icon_bar_set_show_text (ExoIconBar *icon_bar,
+ gboolean show_text)
+{
+ g_return_if_fail (EXO_IS_ICON_BAR (icon_bar));
+ icon_bar->priv->show_text = show_text;
+}
+
+/**
+ * exo_icon_bar_get_show_text:
+ * @icon_bar : An #ExoIconBar.
+ *
+ * Returns: TRUE if text is visible.
+ **/
+gboolean
+exo_icon_bar_get_show_text (ExoIconBar *icon_bar)
+{
+ g_return_val_if_fail (EXO_IS_ICON_BAR (icon_bar), FALSE);
+ return icon_bar->priv->show_text;
+}
+
+/**
+ * exo_icon_bar_show_active:
+ * @icon_bar : An #ExoIconBar.
+ *
+ * Returns: TRUE on success
+ **/
+gboolean
+exo_icon_bar_show_active (ExoIconBar *icon_bar)
+{
+ gint page_size = 0;
+ gint value = 0;
+
+ g_return_val_if_fail (EXO_IS_ICON_BAR (icon_bar), FALSE);
+ if (NULL == icon_bar->priv->active_item)
+ return FALSE;
+
+ if (icon_bar->priv->orientation == GTK_ORIENTATION_VERTICAL)
+ {
+ gtk_adjustment_set_value (icon_bar->priv->vadjustment, icon_bar->priv->active_item->index * icon_bar->priv->item_height);
+ gtk_adjustment_changed (icon_bar->priv->vadjustment);
+ return TRUE;
+ }
+ else
+ {
+ page_size = gtk_adjustment_get_page_size (icon_bar->priv->hadjustment);
+ value = icon_bar->priv->active_item->index * icon_bar->priv->item_width - ((page_size-icon_bar->priv->item_width)/2);
+ if (value > (gtk_adjustment_get_upper (icon_bar->priv->hadjustment)-page_size))
+ value = (gtk_adjustment_get_upper (icon_bar->priv->hadjustment)-page_size);
+
+ gtk_adjustment_set_value (icon_bar->priv->hadjustment, value);
+ gtk_adjustment_changed (icon_bar->priv->hadjustment);
+ return TRUE;
+ }
+ return FALSE;
+}
#define __EXO_ICON_BAR_C__
#include <exo/exo-aliasdef.c>
diff --git a/exo/exo-icon-bar.h b/exo/exo-icon-bar.h
index 03d565c..2febcfa 100644
--- a/exo/exo-icon-bar.h
+++ b/exo/exo-icon-bar.h
@@ -107,6 +107,16 @@ gboolean exo_icon_bar_get_active_iter (ExoIconBar *icon_bar,
void exo_icon_bar_set_active_iter (ExoIconBar *icon_bar,
GtkTreeIter *iter);
+gint exo_icon_bar_get_item_width (ExoIconBar *icon_bar);
+void exo_icon_bar_set_item_width (ExoIconBar *icon_bar,
+ gint item_width);
+
+gboolean exo_icon_bar_get_show_text (ExoIconBar *icon_bar);
+void exo_icon_bar_set_show_text (ExoIconBar *icon_bar,
+ gboolean show_text);
+
+gboolean exo_icon_bar_show_active (ExoIconBar *icon_bar);
+
G_END_DECLS
#endif /* !__EXO_ICON_BAR_H__ */
diff --git a/exo/exo.symbols b/exo/exo.symbols
index a45cc56..6cd0f79 100644
--- a/exo/exo.symbols
+++ b/exo/exo.symbols
@@ -140,6 +140,10 @@ exo_icon_bar_get_active
exo_icon_bar_set_active
exo_icon_bar_get_active_iter
exo_icon_bar_set_active_iter
+exo_icon_bar_get_item_width
+exo_icon_bar_set_item_width
+exo_icon_bar_get_show_text
+exo_icon_bar_set_show_text
#endif
#endif
More information about the Xfce4-commits
mailing list