summaryrefslogtreecommitdiff
path: root/shell/launcher-grid.c
diff options
context:
space:
mode:
authorEmilio Pozuelo Monfort <emilio.pozuelo@collabora.co.uk>2013-10-24 01:49:51 +0200
committerEmilio Pozuelo Monfort <emilio.pozuelo@collabora.co.uk>2013-10-26 02:00:00 +0200
commit315cc4692c2f5c3defa86630d56ebe04d2b6b2a5 (patch)
tree1be7e6bae11b831368189efd259e340a1325309f /shell/launcher-grid.c
parent33a812a33d084a426eb662aa355b31d37c1babe8 (diff)
downloadgraynard-315cc4692c2f5c3defa86630d56ebe04d2b6b2a5.tar.gz
graynard-315cc4692c2f5c3defa86630d56ebe04d2b6b2a5.zip
Make the grid actually show real launchers
Diffstat (limited to 'shell/launcher-grid.c')
-rw-r--r--shell/launcher-grid.c74
1 files changed, 74 insertions, 0 deletions
diff --git a/shell/launcher-grid.c b/shell/launcher-grid.c
new file mode 100644
index 0000000..2ba8443
--- /dev/null
+++ b/shell/launcher-grid.c
@@ -0,0 +1,74 @@
+/*
+ * Copyright (C) 2013 Collabora Ltd.
+ *
+ * Author: Emilio Pozuelo Monfort <emilio.pozuelo@collabora.co.uk>
+ */
+
+#include "launcher-grid.h"
+
+#include <gtk/gtk.h>
+
+#include "app-launcher.h"
+#include "shell-app-system.h"
+#include "egg-flow-box.h"
+
+static void
+child_activated_cb (GtkWidget *grid,
+ GtkWidget *widget,
+ GtkWidget *scrolled_window)
+{
+ AppLauncher *app = APP_LAUNCHER (widget);
+
+ app_launcher_activate (app);
+
+ /* A menu item has been activated so let's hide the menu */
+ gtk_widget_hide (gtk_widget_get_parent (scrolled_window));
+}
+
+static void
+installed_changed_cb (ShellAppSystem *app_system, GtkWidget *grid)
+{
+ GHashTable *entries = shell_app_system_get_entries (app_system);
+ GHashTableIter iter;
+ gpointer key, value;
+
+ /* FIXME: if the tree changes while we're running, we'll readd entries
+ * that haven't been removed from the tree, so we'll get lots of dups */
+
+ g_hash_table_iter_init (&iter, entries);
+ while (g_hash_table_iter_next (&iter, &key, &value))
+ {
+ GDesktopAppInfo *info = value;
+ GtkWidget *app = app_launcher_new_from_desktop_info (info);
+
+ gtk_container_add (GTK_CONTAINER (grid), app);
+ }
+
+gtk_widget_show_all (grid);
+}
+
+GtkWidget *
+launcher_grid_new (void)
+{
+ GtkWidget *scrolled_window;
+ GtkWidget *grid;
+ ShellAppSystem *app_system;
+
+ scrolled_window = gtk_scrolled_window_new (NULL, NULL);
+
+ grid = egg_flow_box_new ();
+ egg_flow_box_set_homogeneous (EGG_FLOW_BOX (grid), TRUE);
+ g_signal_connect (grid, "child-activated",
+ G_CALLBACK (child_activated_cb), scrolled_window);
+
+ gtk_container_add (GTK_CONTAINER (scrolled_window), grid);
+
+ app_system = shell_app_system_get_default ();
+ g_signal_connect (app_system, "installed-changed",
+ G_CALLBACK (installed_changed_cb), grid);
+ installed_changed_cb (app_system, grid);
+
+ gtk_widget_show_all (scrolled_window);
+
+ return scrolled_window;
+}