static void gb_command_provider_set_workbench (GbCommandProvider *provider, GbWorkbench *workbench) { GbCommandProviderPrivate *priv = gb_command_provider_get_instance_private (provider); g_return_if_fail (GB_IS_COMMAND_PROVIDER (provider)); g_return_if_fail (!workbench || GB_IS_WORKBENCH (workbench)); if (priv->workbench != workbench) { if (priv->workbench) { gb_command_provider_disconnect (provider, workbench); g_object_remove_weak_pointer (G_OBJECT (priv->workbench), (gpointer *)&priv->workbench); priv->workbench = NULL; } if (workbench) { priv->workbench = workbench; g_object_add_weak_pointer (G_OBJECT (priv->workbench), (gpointer *)&priv->workbench); gb_command_provider_connect (provider, workbench); } g_object_notify_by_pspec (G_OBJECT (provider), gParamSpecs [PROP_WORKBENCH]); } }
static void gb_command_provider_set_active_view (GbCommandProvider *provider, GbView *tab) { GbCommandProviderPrivate *priv = gb_command_provider_get_instance_private (provider); g_return_if_fail (GB_IS_COMMAND_PROVIDER (provider)); g_return_if_fail (!tab || GB_IS_VIEW (tab)); if (priv->active_view) { g_object_remove_weak_pointer (G_OBJECT (priv->active_view), (gpointer *)&priv->active_view); priv->active_view = NULL; } if (tab) { priv->active_view = tab; g_object_add_weak_pointer (G_OBJECT (priv->active_view), (gpointer *)&priv->active_view); } g_object_notify_by_pspec (G_OBJECT (provider), gParamSpecs [PROP_ACTIVE_VIEW]); }
/** * gb_command_provider_get_active_view: * * Returns the "active-tab" property. The active-tab is the last tab that * was focused in the workbench. * * Returns: (transfer none): A #GbView or %NULL. */ GbView * gb_command_provider_get_active_view (GbCommandProvider *provider) { GbCommandProviderPrivate *priv = gb_command_provider_get_instance_private (provider); g_return_val_if_fail (GB_IS_COMMAND_PROVIDER (provider), NULL); return priv->active_view; }
gint gb_command_provider_get_priority (GbCommandProvider *provider) { GbCommandProviderPrivate *priv = gb_command_provider_get_instance_private (provider); g_return_val_if_fail (GB_IS_COMMAND_PROVIDER (provider), 0); return priv->priority; }
GbWorkbench * gb_command_provider_get_workbench (GbCommandProvider *provider) { GbCommandProviderPrivate *priv = gb_command_provider_get_instance_private (provider); g_return_val_if_fail (GB_IS_COMMAND_PROVIDER (provider), NULL); return priv->workbench; }
static void on_notify_priority_cb (GbCommandProvider *provider, GParamSpec *pspec, GbCommandManager *manager) { g_return_if_fail (GB_IS_COMMAND_PROVIDER (provider)); g_return_if_fail (GB_IS_COMMAND_MANAGER (manager)); g_ptr_array_sort (manager->providers, provider_compare_func); }
/** * gb_command_provider_complete: * @provider: (in): The #GbCommandProvider * @completions: (in): A #GPtrArray where completed strings can be added * @command_text: (in): Initial command text to be completed * */ void gb_command_provider_complete (GbCommandProvider *provider, GPtrArray *completions, const gchar *initial_command_text) { g_return_if_fail (GB_IS_COMMAND_PROVIDER (provider)); g_return_if_fail (completions); g_return_if_fail (initial_command_text); g_signal_emit (provider, gSignals [COMPLETE], 0, completions, initial_command_text); }
static void gb_command_provider_disconnect (GbCommandProvider *provider, GbWorkbench *workbench) { g_return_if_fail (GB_IS_COMMAND_PROVIDER (provider)); g_return_if_fail (GB_IS_WORKBENCH (workbench)); g_signal_handlers_disconnect_by_func (workbench, G_CALLBACK (on_workbench_set_focus), provider); }
/** * gb_command_provider_lookup: * @provider: (in): The #GbCommandProvider * @command_text: (in): Command text to be parsed * * * Returns: (transfer full): A #GbCommand if successful; otherwise %NULL. */ GbCommand * gb_command_provider_lookup (GbCommandProvider *provider, const gchar *command_text) { GbCommand *ret = NULL; g_return_val_if_fail (GB_IS_COMMAND_PROVIDER (provider), NULL); g_return_val_if_fail (command_text, NULL); g_signal_emit (provider, gSignals [LOOKUP], 0, command_text, &ret); return ret; }
static void gb_command_provider_connect (GbCommandProvider *provider, GbWorkbench *workbench) { g_return_if_fail (GB_IS_COMMAND_PROVIDER (provider)); g_return_if_fail (GB_IS_WORKBENCH (workbench)); g_signal_connect_object (workbench, "set-focus", G_CALLBACK (on_workbench_set_focus), provider, G_CONNECT_SWAPPED); }
void gb_command_manager_add_provider (GbCommandManager *manager, GbCommandProvider *provider) { g_return_if_fail (GB_IS_COMMAND_MANAGER (manager)); g_return_if_fail (GB_IS_COMMAND_PROVIDER (provider)); g_signal_connect_object (provider, "notify::priority", G_CALLBACK (on_notify_priority_cb), manager, 0); g_ptr_array_add (manager->providers, g_object_ref (provider)); g_ptr_array_sort (manager->providers, provider_compare_func); }
void gb_command_provider_set_priority (GbCommandProvider *provider, gint priority) { GbCommandProviderPrivate *priv = gb_command_provider_get_instance_private (provider); g_return_if_fail (GB_IS_COMMAND_PROVIDER (provider)); if (priv->priority != priority) { priv->priority = priority; g_object_notify_by_pspec (G_OBJECT (provider), gParamSpecs [PROP_PRIORITY]); } }
static void on_workbench_set_focus (GbCommandProvider *provider, GtkWidget *widget, GbWorkbench *workbench) { g_return_if_fail (GB_IS_COMMAND_PROVIDER (provider)); g_return_if_fail (GB_IS_WORKBENCH (workbench)); g_return_if_fail (!widget || GTK_IS_WIDGET (widget)); /* walk the hierarchy to find a tab */ if (widget) while (!GB_IS_VIEW (widget)) if (!(widget = gtk_widget_get_parent (widget))) break; if (GB_IS_VIEW (widget)) gb_command_provider_set_active_view (provider, GB_VIEW (widget)); }