[gnome-builder/wip/commands] commands: query providers to create a command instance
- From: Christian Hergert <chergert src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-builder/wip/commands] commands: query providers to create a command instance
- Date: Wed, 8 Oct 2014 04:57:32 +0000 (UTC)
commit 1a866cb8aabbeae47b5b80ffaf5e4397564eef30
Author: Christian Hergert <christian hergert me>
Date: Tue Oct 7 21:56:59 2014 -0700
commands: query providers to create a command instance
If no command was found, let a provider attempt to create one.
src/commands/gb-command-manager.c | 21 +++++++++++++++------
1 files changed, 15 insertions(+), 6 deletions(-)
---
diff --git a/src/commands/gb-command-manager.c b/src/commands/gb-command-manager.c
index 2722473..00f4931 100644
--- a/src/commands/gb-command-manager.c
+++ b/src/commands/gb-command-manager.c
@@ -165,7 +165,7 @@ gb_command_manager_lookup (GbCommandManager *manager,
const gchar *colon;
GbCommand *command;
GVariant *variant = NULL;
- gchar *name;
+ gchar *name = NULL;
g_return_val_if_fail (GB_IS_COMMAND_MANAGER (manager), NULL);
g_return_val_if_fail (command_text, NULL);
@@ -196,23 +196,32 @@ gb_command_manager_lookup (GbCommandManager *manager,
* Now let's look up a command by name.
*/
name = gb_command_manager_parse (manager, command_text, &variant);
- if (!name)
- return NULL;
+ if (name)
+ command = g_hash_table_lookup (priv->commands, name);
- command = g_hash_table_lookup (priv->commands, name);
+ g_free (name);
/*
* Now let's see if a command provider will create one for us.
*/
if (!command)
{
- /* TODO */
+ GHashTableIter iter;
+ GbCommandProvider *provider;
+
+ g_hash_table_iter_init (&iter, manager->priv->providers);
+ while (g_hash_table_iter_next (&iter, NULL, (gpointer *)&provider))
+ {
+ command = gb_command_provider_create (provider, command_text);
+ if (command)
+ return command;
+ }
}
if (command && parameters)
*parameters = variant ? g_variant_ref (variant) : NULL;
- g_clear_pointer (&name, g_free);
+ /* XXX: leaking */
g_clear_pointer (&variant, g_variant_unref);
return command ? g_object_ref (command) : NULL;
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]