[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