[gnome-builder/wip/commands2] commands: add command-bar and command-bar-item.



commit ade1f9887494d8315e6803c047f26c24fcb94feb
Author: Christian Hergert <christian hergert me>
Date:   Thu Oct 9 21:15:01 2014 -0700

    commands: add command-bar and command-bar-item.

 src/commands/gb-command-bar-item.c |  192 ++++++++++++++++++++++++
 src/commands/gb-command-bar-item.h |   59 ++++++++
 src/commands/gb-command-bar.c      |  291 ++++++++++++++++++++++++++++++++++++
 src/commands/gb-command-bar.h      |   58 +++++++
 src/gnome-builder.mk               |    4 +
 5 files changed, 604 insertions(+), 0 deletions(-)
---
diff --git a/src/commands/gb-command-bar-item.c b/src/commands/gb-command-bar-item.c
new file mode 100644
index 0000000..c357f91
--- /dev/null
+++ b/src/commands/gb-command-bar-item.c
@@ -0,0 +1,192 @@
+/* gb-command-bar-item.c
+ *
+ * Copyright (C) 2014 Christian Hergert <christian hergert me>
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include <glib/gi18n.h>
+
+#include "gb-command-bar-item.h"
+
+struct _GbCommandBarItemPrivate
+{
+  GbCommandResult *result;
+
+  GtkWidget *command_text;
+  GtkWidget *result_text;
+  GtkWidget *equal_label;
+};
+
+G_DEFINE_TYPE_WITH_PRIVATE (GbCommandBarItem, gb_command_bar_item, GTK_TYPE_BIN)
+
+enum {
+  PROP_0,
+  PROP_RESULT,
+  LAST_PROP
+};
+
+static GParamSpec *gParamSpecs [LAST_PROP];
+
+GtkWidget *
+gb_command_bar_item_new (GbCommandResult *result)
+{
+  return g_object_new (GB_TYPE_COMMAND_BAR_ITEM,
+                       "result", result,
+                       NULL);
+}
+
+/**
+ * gb_command_bar_item_get_result:
+ * @item: A #GbCommandBarItem.
+ *
+ * Retrieves the result text widget so it can be used in the command bar
+ * sizing group.
+ *
+ * Returns: (transfer none): The result text widget.
+ */
+GtkWidget *
+gb_command_bar_item_get_result (GbCommandBarItem *item)
+{
+  g_return_val_if_fail (GB_IS_COMMAND_BAR_ITEM (item), NULL);
+
+  return item->priv->result_text;
+}
+
+static gboolean
+string_to_boolean (GBinding     *binding,
+                   const GValue *from_value,
+                   GValue       *to_value,
+                   gpointer      user_data)
+{
+  g_value_set_boolean (to_value, !!g_value_get_string (from_value));
+  return TRUE;
+}
+
+static void
+gb_command_bar_item_set_result (GbCommandBarItem *item,
+                                GbCommandResult  *result)
+{
+  g_return_val_if_fail (GB_IS_COMMAND_BAR_ITEM (item), NULL);
+  g_return_val_if_fail (GB_IS_COMMAND_RESULT (result), NULL);
+
+  if (item->priv->result != result)
+    {
+      if (item->priv->result)
+        g_clear_object (&item->priv->result);
+
+      if (result)
+        {
+          item->priv->result = g_object_ref (result);
+          g_object_bind_property (result, "command-text",
+                                  item->priv->command_text, "label",
+                                  G_BINDING_SYNC_CREATE);
+          g_object_bind_property (result, "result-text",
+                                  item->priv->result_text, "label",
+                                  G_BINDING_SYNC_CREATE);
+          g_object_bind_property_full (result, "result-text",
+                                       item->priv->equal_label, "visible",
+                                       G_BINDING_SYNC_CREATE,
+                                       string_to_boolean,
+                                       NULL, NULL, NULL);
+        }
+
+      g_object_notify_by_pspec (G_OBJECT (item), gParamSpecs [PROP_RESULT]);
+    }
+}
+
+static void
+gb_command_bar_item_dispose (GObject *object)
+{
+  GbCommandBarItemPrivate *priv = GB_COMMAND_BAR_ITEM (object)->priv;
+
+  g_clear_object (&priv->result);
+
+  G_OBJECT_CLASS (gb_command_bar_item_parent_class)->dispose (object);
+}
+
+static void
+gb_command_bar_item_get_property (GObject    *object,
+                                  guint       prop_id,
+                                  GValue     *value,
+                                  GParamSpec *pspec)
+{
+  GbCommandBarItem *self = GB_COMMAND_BAR_ITEM (object);
+
+  switch (prop_id)
+    {
+    case PROP_RESULT:
+      g_value_set_object (value, gb_command_bar_item_get_result (self));
+      break;
+
+    default:
+      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+    }
+}
+
+static void
+gb_command_bar_item_set_property (GObject      *object,
+                                  guint         prop_id,
+                                  const GValue *value,
+                                  GParamSpec   *pspec)
+{
+  GbCommandBarItem *self = GB_COMMAND_BAR_ITEM (object);
+
+  switch (prop_id)
+    {
+    case PROP_RESULT:
+      gb_command_bar_item_set_result (self, g_value_get_object (value));
+      break;
+
+    default:
+      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+    }
+}
+
+static void
+gb_command_bar_item_class_init (GbCommandBarItemClass *klass)
+{
+  GObjectClass *object_class = G_OBJECT_CLASS (klass);
+  GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass);
+
+  object_class->dispose = gb_command_bar_item_dispose;
+  object_class->get_property = gb_command_bar_item_get_property;
+  object_class->set_property = gb_command_bar_item_set_property;
+
+  gtk_widget_class_set_template_from_resource (widget_class,
+                                               "/org/gnome/builder/ui/gb-command-bar-item.ui");
+
+  gtk_widget_class_bind_template_child_private (widget_class, GbCommandBarItem, command_text);
+  gtk_widget_class_bind_template_child_private (widget_class, GbCommandBarItem, result_text);
+  gtk_widget_class_bind_template_child_private (widget_class, GbCommandBarItem, equal_label);
+
+  gParamSpecs [PROP_RESULT] =
+    g_param_spec_object ("result",
+                         _("Result"),
+                         _("The result to be visualized in the item."),
+                         GB_TYPE_COMMAND_RESULT,
+                         (G_PARAM_READWRITE |
+                          G_PARAM_CONSTRUCT_ONLY |
+                          G_PARAM_STATIC_STRINGS));
+  g_object_class_install_property (object_class, PROP_RESULT,
+                                   gParamSpecs [PROP_RESULT]);
+}
+
+static void
+gb_command_bar_item_init (GbCommandBarItem *self)
+{
+  self->priv = gb_command_bar_item_get_instance_private (self);
+
+  gtk_widget_init_template (GTK_WIDGET (self));
+}
diff --git a/src/commands/gb-command-bar-item.h b/src/commands/gb-command-bar-item.h
new file mode 100644
index 0000000..7f70d45
--- /dev/null
+++ b/src/commands/gb-command-bar-item.h
@@ -0,0 +1,59 @@
+/* gb-command-bar-item.h
+ *
+ * Copyright (C) 2014 Christian Hergert <christian hergert me>
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#ifndef GB_COMMAND_BAR_ITEM_H
+#define GB_COMMAND_BAR_ITEM_H
+
+#include <gtk/gtk.h>
+
+#include "gb-command-result.h"
+
+G_BEGIN_DECLS
+
+#define GB_TYPE_COMMAND_BAR_ITEM            (gb_command_bar_item_get_type())
+#define GB_COMMAND_BAR_ITEM(obj)            (G_TYPE_CHECK_INSTANCE_CAST ((obj), GB_TYPE_COMMAND_BAR_ITEM, 
GbCommandBarItem))
+#define GB_COMMAND_BAR_ITEM_CONST(obj)      (G_TYPE_CHECK_INSTANCE_CAST ((obj), GB_TYPE_COMMAND_BAR_ITEM, 
GbCommandBarItem const))
+#define GB_COMMAND_BAR_ITEM_CLASS(klass)    (G_TYPE_CHECK_CLASS_CAST ((klass),  GB_TYPE_COMMAND_BAR_ITEM, 
GbCommandBarItemClass))
+#define GB_IS_COMMAND_BAR_ITEM(obj)         (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GB_TYPE_COMMAND_BAR_ITEM))
+#define GB_IS_COMMAND_BAR_ITEM_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass),  GB_TYPE_COMMAND_BAR_ITEM))
+#define GB_COMMAND_BAR_ITEM_GET_CLASS(obj)  (G_TYPE_INSTANCE_GET_CLASS ((obj),  GB_TYPE_COMMAND_BAR_ITEM, 
GbCommandBarItemClass))
+
+typedef struct _GbCommandBarItem        GbCommandBarItem;
+typedef struct _GbCommandBarItemClass   GbCommandBarItemClass;
+typedef struct _GbCommandBarItemPrivate GbCommandBarItemPrivate;
+
+struct _GbCommandBarItem
+{
+  GtkBin parent;
+
+  /*< private >*/
+  GbCommandBarItemPrivate *priv;
+};
+
+struct _GbCommandBarItemClass
+{
+  GtkBinClass parent;
+};
+
+GType      gb_command_bar_item_get_type   (void) G_GNUC_CONST;
+GtkWidget *gb_command_bar_item_new        (GbCommandResult  *result);
+GtkWidget *gb_command_bar_item_get_result (GbCommandBarItem *item);
+
+G_END_DECLS
+
+#endif /* GB_COMMAND_BAR_ITEM_H */
diff --git a/src/commands/gb-command-bar.c b/src/commands/gb-command-bar.c
new file mode 100644
index 0000000..3b9c6da
--- /dev/null
+++ b/src/commands/gb-command-bar.c
@@ -0,0 +1,291 @@
+/* gb-command-bar.c
+ *
+ * Copyright (C) 2014 Christian Hergert <christian hergert me>
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include <glib/gi18n.h>
+
+#include "gb-animation.h"
+#include "gb-command.h"
+#include "gb-command-bar.h"
+#include "gb-command-bar-item.h"
+#include "gb-command-manager.h"
+#include "gb-string.h"
+
+struct _GbCommandBarPrivate
+{
+  GtkSizeGroup      *result_size_group;
+  GtkEntry          *entry;
+  GtkFrame          *frame;
+  GtkListBox        *list_box;
+  GtkScrolledWindow *scroller;
+};
+
+G_DEFINE_TYPE_WITH_PRIVATE (GbCommandBar, gb_command_bar, GTK_TYPE_REVEALER)
+
+GtkWidget *
+gb_command_bar_new (void)
+{
+  return g_object_new (GB_TYPE_COMMAND_BAR, NULL);
+}
+
+/**
+ * gb_command_bar_hide:
+ * @bar: A #GbCommandBar
+ * 
+ * Hides the command bar in an animated fashion.
+ */
+void
+gb_command_bar_hide (GbCommandBar *bar)
+{
+  g_return_if_fail (GB_IS_COMMAND_BAR (bar));
+
+  gtk_revealer_set_reveal_child (GTK_REVEALER (bar), FALSE);
+}
+
+/**
+ * gb_command_bar_show:
+ * @bar: A #GbCommandBar
+ * 
+ * Shows the command bar in an animated fashion.
+ */
+void
+gb_command_bar_show (GbCommandBar *bar)
+{
+  g_return_if_fail (GB_IS_COMMAND_BAR (bar));
+
+  gtk_revealer_set_reveal_child (GTK_REVEALER (bar), TRUE);
+  gtk_widget_grab_focus (GTK_WIDGET (bar->priv->entry));
+}
+
+static void
+gb_command_bar_push_result (GbCommandBar    *bar,
+                            GbCommandResult *result)
+{
+  GtkAdjustment *vadj;
+  GdkFrameClock *frame_clock;
+  GtkWidget *item;
+  GtkWidget *result_widget;
+  gdouble upper;
+
+  g_return_if_fail (GB_IS_COMMAND_BAR (bar));
+  g_return_if_fail (GB_IS_COMMAND_RESULT (result));
+
+  item = g_object_new (GB_TYPE_COMMAND_BAR_ITEM,
+                       "result", result,
+                       "visible", TRUE,
+                       NULL);
+  gtk_container_add (GTK_CONTAINER (bar->priv->list_box), item);
+
+  result_widget = gb_command_bar_item_get_result (GB_COMMAND_BAR_ITEM (item));
+  gtk_size_group_add_widget (bar->priv->result_size_group, result_widget);
+
+  vadj = gtk_list_box_get_adjustment (bar->priv->list_box);
+  upper = gtk_adjustment_get_upper (vadj);
+  frame_clock = gtk_widget_get_frame_clock (GTK_WIDGET (bar->priv->list_box));
+
+  gb_object_animate (vadj,
+                     GB_ANIMATION_EASE_IN_CUBIC,
+                     250,
+                     frame_clock,
+                     "value", upper,
+                     NULL);
+}
+
+static void
+gb_command_bar_on_entry_activate (GbCommandBar *bar,
+                                  GtkEntry     *entry)
+{
+  GbWorkbench *workbench = NULL;
+  const gchar *text;
+
+  g_return_if_fail (GB_IS_COMMAND_BAR (bar));
+  g_return_if_fail (GTK_IS_ENTRY (entry));
+
+  text = gtk_entry_get_text (entry);
+
+  workbench = GB_WORKBENCH (gtk_widget_get_toplevel (GTK_WIDGET (bar)));
+  if (!workbench)
+    return;
+
+  if (!gb_str_empty0 (text))
+    {
+      GbCommandManager *manager;
+      GbCommandResult *result = NULL;
+      GbCommand *command = NULL;
+
+      manager = gb_workbench_get_command_manager (workbench);
+      command = gb_command_manager_lookup (manager, text);
+
+      if (command)
+        {
+          result = gb_command_execute (command);
+          if (result)
+            gb_command_bar_push_result (bar, result);
+        }
+      else
+        {
+          gchar *errmsg;
+
+          errmsg = g_strdup_printf (_("Command not found: %s"), text);
+          result = g_object_new (GB_TYPE_COMMAND_RESULT,
+                                 "is-error", TRUE,
+                                 "command-text", errmsg,
+                                 NULL);
+          gb_command_bar_push_result (bar, result);
+          g_object_unref (result);
+          g_free (errmsg);
+        }
+
+      g_clear_object (&result);
+      g_clear_object (&command);
+    }
+  else
+    gb_command_bar_hide (bar);
+
+  gtk_entry_set_text (bar->priv->entry, "");
+}
+
+static gboolean
+gb_command_bar_on_entry_focus_out_event (GbCommandBar *bar,
+                                         GdkEventKey  *event,
+                                         GtkEntry     *entry)
+{
+  g_return_val_if_fail (GB_IS_COMMAND_BAR (bar), FALSE);
+  g_return_val_if_fail (event, FALSE);
+  g_return_val_if_fail (GTK_IS_ENTRY (entry), FALSE);
+
+  gb_command_bar_hide (bar);
+
+  return GDK_EVENT_PROPAGATE;
+}
+
+static void
+gb_command_bar_grab_focus (GtkWidget *widget)
+{
+  GbCommandBar *bar = (GbCommandBar *)widget;
+
+  g_return_if_fail (GB_IS_COMMAND_BAR (bar));
+
+  gtk_widget_grab_focus (GTK_WIDGET (bar->priv->entry));
+}
+
+static gboolean
+gb_command_bar_on_entry_key_press_event (GbCommandBar *bar,
+                                         GdkEventKey  *event,
+                                         GtkEntry     *entry)
+{
+  g_return_val_if_fail (GB_IS_COMMAND_BAR (bar), FALSE);
+  g_return_val_if_fail (event, FALSE);
+  g_return_val_if_fail (GTK_IS_ENTRY (entry), FALSE);
+
+  if (event->keyval == GDK_KEY_Escape)
+    {
+      gb_command_bar_hide (bar);
+      return TRUE;
+    }
+
+  return GDK_EVENT_PROPAGATE;
+}
+
+static void
+update_header_func (GtkListBoxRow *row,
+                    GtkListBoxRow *before,
+                    gpointer       user_data)
+{
+  if (before)
+    {
+      GtkWidget *sep;
+
+      sep = g_object_new (GTK_TYPE_SEPARATOR,
+                          "orientation", GTK_ORIENTATION_HORIZONTAL,
+                          "visible", TRUE,
+                          NULL);
+      gtk_list_box_row_set_header (row, sep);
+    }
+}
+
+static void
+gb_command_bar_constructed (GObject *object)
+{
+  GbCommandBar *bar = (GbCommandBar *)object;
+  GtkWidget *placeholder;
+
+  G_OBJECT_CLASS (gb_command_bar_parent_class)->constructed (object);
+
+  placeholder = g_object_new (GTK_TYPE_LABEL,
+                              "visible", TRUE,
+                              "label", _("Use the entry below to execute a command"),
+                              NULL);
+  gtk_style_context_add_class (gtk_widget_get_style_context (placeholder),
+                               "gb-command-bar-placeholder");
+  gtk_list_box_set_placeholder (bar->priv->list_box, placeholder);
+
+  g_signal_connect_object (bar->priv->entry,
+                           "activate",
+                           G_CALLBACK (gb_command_bar_on_entry_activate),
+                           bar,
+                           G_CONNECT_SWAPPED);
+
+  g_signal_connect_object (bar->priv->entry,
+                           "focus-out-event",
+                           G_CALLBACK (gb_command_bar_on_entry_focus_out_event),
+                           bar,
+                           G_CONNECT_SWAPPED);
+
+  g_signal_connect_object (bar->priv->entry,
+                           "key-press-event",
+                           G_CALLBACK (gb_command_bar_on_entry_key_press_event),
+                           bar,
+                           G_CONNECT_SWAPPED);
+
+  gtk_list_box_set_header_func (bar->priv->list_box, update_header_func,
+                                NULL, NULL);
+}
+
+static void
+gb_command_bar_finalize (GObject *object)
+{
+  G_OBJECT_CLASS (gb_command_bar_parent_class)->finalize (object);
+}
+
+static void
+gb_command_bar_class_init (GbCommandBarClass *klass)
+{
+  GObjectClass *object_class = G_OBJECT_CLASS (klass);
+  GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass);
+
+  object_class->constructed = gb_command_bar_constructed;
+  object_class->finalize = gb_command_bar_finalize;
+
+  widget_class->grab_focus = gb_command_bar_grab_focus;
+
+  gtk_widget_class_set_template_from_resource (widget_class,
+                                               "/org/gnome/builder/ui/gb-command-bar.ui");
+
+  gtk_widget_class_bind_template_child_private (widget_class, GbCommandBar, entry);
+  gtk_widget_class_bind_template_child_private (widget_class, GbCommandBar, frame);
+  gtk_widget_class_bind_template_child_private (widget_class, GbCommandBar, list_box);
+  gtk_widget_class_bind_template_child_private (widget_class, GbCommandBar, scroller);
+  gtk_widget_class_bind_template_child_private (widget_class, GbCommandBar, result_size_group);
+}
+
+static void
+gb_command_bar_init (GbCommandBar *self)
+{
+  self->priv = gb_command_bar_get_instance_private (self);
+  gtk_widget_init_template (GTK_WIDGET (self));
+}
diff --git a/src/commands/gb-command-bar.h b/src/commands/gb-command-bar.h
new file mode 100644
index 0000000..7f120b8
--- /dev/null
+++ b/src/commands/gb-command-bar.h
@@ -0,0 +1,58 @@
+/* gb-command-bar.h
+ *
+ * Copyright (C) 2014 Christian Hergert <christian hergert me>
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#ifndef GB_COMMAND_BAR_H
+#define GB_COMMAND_BAR_H
+
+#include <gtk/gtk.h>
+
+G_BEGIN_DECLS
+
+#define GB_TYPE_COMMAND_BAR            (gb_command_bar_get_type())
+#define GB_COMMAND_BAR(obj)            (G_TYPE_CHECK_INSTANCE_CAST ((obj), GB_TYPE_COMMAND_BAR, 
GbCommandBar))
+#define GB_COMMAND_BAR_CONST(obj)      (G_TYPE_CHECK_INSTANCE_CAST ((obj), GB_TYPE_COMMAND_BAR, GbCommandBar 
const))
+#define GB_COMMAND_BAR_CLASS(klass)    (G_TYPE_CHECK_CLASS_CAST ((klass),  GB_TYPE_COMMAND_BAR, 
GbCommandBarClass))
+#define GB_IS_COMMAND_BAR(obj)         (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GB_TYPE_COMMAND_BAR))
+#define GB_IS_COMMAND_BAR_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass),  GB_TYPE_COMMAND_BAR))
+#define GB_COMMAND_BAR_GET_CLASS(obj)  (G_TYPE_INSTANCE_GET_CLASS ((obj),  GB_TYPE_COMMAND_BAR, 
GbCommandBarClass))
+
+typedef struct _GbCommandBar        GbCommandBar;
+typedef struct _GbCommandBarClass   GbCommandBarClass;
+typedef struct _GbCommandBarPrivate GbCommandBarPrivate;
+
+struct _GbCommandBar
+{
+  GtkRevealer parent;
+
+  /*< private >*/
+  GbCommandBarPrivate *priv;
+};
+
+struct _GbCommandBarClass
+{
+  GtkRevealerClass parent;
+};
+
+GType      gb_command_bar_get_type (void) G_GNUC_CONST;
+GtkWidget *gb_command_bar_new      (void);
+void       gb_command_bar_show     (GbCommandBar *bar);
+void       gb_command_bar_hide     (GbCommandBar *bar);
+
+G_END_DECLS
+
+#endif /* GB_COMMAND_BAR_H */
diff --git a/src/gnome-builder.mk b/src/gnome-builder.mk
index c28496a..70c53d2 100644
--- a/src/gnome-builder.mk
+++ b/src/gnome-builder.mk
@@ -11,6 +11,10 @@ libgnome_builder_la_SOURCES = \
        src/app/gb-application.h \
        src/commands/gb-command.c \
        src/commands/gb-command.h \
+       src/commands/gb-command-bar.c \
+       src/commands/gb-command-bar.h \
+       src/commands/gb-command-bar-item.c \
+       src/commands/gb-command-bar-item.h \
        src/commands/gb-command-gaction-provider.c \
        src/commands/gb-command-gaction-provider.h \
        src/commands/gb-command-manager.c \


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]