diff options
| author | Emilio Pozuelo Monfort <emilio.pozuelo@collabora.co.uk> | 2013-10-24 01:49:51 +0200 |
|---|---|---|
| committer | Emilio Pozuelo Monfort <emilio.pozuelo@collabora.co.uk> | 2013-10-26 02:00:00 +0200 |
| commit | 315cc4692c2f5c3defa86630d56ebe04d2b6b2a5 (patch) | |
| tree | 1be7e6bae11b831368189efd259e340a1325309f /shell/launcher-grid.c | |
| parent | 33a812a33d084a426eb662aa355b31d37c1babe8 (diff) | |
| download | graynard-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.c | 74 |
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; +} |
