static void update_type_list (AnjutaShell *shell, IAnjutaIterable *iter, const gchar *name) { gchar *list = NULL; GValue value = {0,}; if (iter) { ianjuta_iterable_first (iter, NULL); if (ianjuta_iterable_get_length (iter, NULL) > 0) { GString *s = g_string_sized_new(ianjuta_iterable_get_length (iter, NULL) * 10); do { IAnjutaSymbol *symbol = IANJUTA_SYMBOL (iter); const gchar *sname = ianjuta_symbol_get_string (symbol, IANJUTA_SYMBOL_FIELD_NAME, NULL); g_string_append(s, sname); g_string_append_c(s, ' '); } while (ianjuta_iterable_next (iter, NULL)); list = g_string_free(s, FALSE); } } anjuta_shell_get_value (shell, name, &value, NULL); if (G_VALUE_HOLDS_STRING(&value)) { const gchar *value_list = g_value_get_string (&value); if (list == NULL) { anjuta_shell_remove_value (shell, name, NULL); } else if (strcmp (list, value_list) == 0) { g_free (list); } else { g_value_take_string (&value, list); anjuta_shell_add_value (shell, name, &value, NULL); } } else { if (list != NULL) { g_value_init (&value, G_TYPE_STRING); g_value_take_string (&value, list); anjuta_shell_add_value (shell, name, &value, NULL); } } if (G_IS_VALUE (&value)) g_value_unset (&value); }
/** * anjuta_shell_add_valist: * @shell: A #AnjutaShell interface * @first_name: First value name * @first_type: First value type * @var_args: First value, Second value name, Second value type .... * * Adds a valist of values in the shell. The valist should be in the order - * value1, name2, type2, value2,... "value_added" signal will be emitted * for each of the value. */ void anjuta_shell_add_valist (AnjutaShell *shell, const char *first_name, GType first_type, va_list var_args) { const char *name; GType type; g_return_if_fail (shell != NULL); g_return_if_fail (ANJUTA_IS_SHELL (shell)); g_return_if_fail (first_name != NULL); name = first_name; type = first_type; while (name) { GValue value = {0, }; GError *err = NULL; char *error; g_value_init (&value, type); G_VALUE_COLLECT (&value, var_args, 0, &error); if (error) { g_warning ("%s: %s", G_STRLOC, error); g_free (error); break; } anjuta_shell_add_value (shell, name, &value, &err); g_value_unset (&value); if (err) { g_warning ("Could not set value: %s\n", err->message); g_error_free (err); break; } name = va_arg (var_args, char *); if (name) { type = va_arg (var_args, GType); } } }
static void on_file_view_current_file_changed (AnjutaFileView* view, GFile* file, AnjutaFileManager* file_manager) { if (file) { GValue* value; value = g_new0 (GValue, 1); g_value_init (value, G_TYPE_FILE); g_value_set_object (value, file); anjuta_shell_add_value (ANJUTA_PLUGIN (file_manager)->shell, IANJUTA_FILE_MANAGER_SELECTED_FILE, value, NULL); g_value_unset (value); } else { anjuta_shell_remove_value (ANJUTA_PLUGIN(file_manager)->shell, IANJUTA_FILE_MANAGER_SELECTED_FILE, NULL); } }
void build_project_configured (GObject *sender, IAnjutaBuilderHandle handle, GError *error, gpointer user_data) { BuildConfigureAndBuild *pack = (BuildConfigureAndBuild *)user_data; if (error == NULL) { BuildContext *context = (BuildContext *)handle; BasicAutotoolsPlugin *plugin = (BasicAutotoolsPlugin *)(context == NULL ? (void *)sender : (void *)build_context_get_plugin (context)); GValue *value; gchar *uri; /* FIXME: check if build directory correspond, configuration could have changed */ value = g_new0 (GValue, 1); g_value_init (value, G_TYPE_STRING); uri = build_configuration_list_get_build_uri (plugin->configurations, build_configuration_list_get_selected (plugin->configurations)); g_value_set_string (value, uri); g_free (uri); anjuta_shell_add_value (ANJUTA_PLUGIN (plugin)->shell, IANJUTA_BUILDER_ROOT_URI, value, NULL); build_update_configuration_menu (plugin); /* Call build function if necessary */ if ((pack) && (pack->func != NULL)) pack->func (plugin, pack->file, pack->callback, pack->user_data, NULL); } if (pack) { g_free (pack->args); if (pack->file != NULL) g_object_unref (pack->file); g_free (pack); } }
gboolean anjuta_pm_project_load (AnjutaPmProject *project, GFile *file, GError **error) { AnjutaPluginManager *plugin_manager; GList *desc; IAnjutaProjectBackend *backend; gint found = 0; GValue value = {0, }; g_return_val_if_fail (file != NULL, FALSE); DEBUG_PRINT ("loading gbf backend…\n"); plugin_manager = anjuta_shell_get_plugin_manager (project->plugin->shell, NULL); if (!anjuta_plugin_manager_is_active_plugin (plugin_manager, "IAnjutaProjectBackend")) { GList *descs = NULL; descs = anjuta_plugin_manager_query (plugin_manager, "Anjuta Plugin", "Interfaces", "IAnjutaProjectBackend", NULL); backend = NULL; for (desc = g_list_first (descs); desc != NULL; desc = g_list_next (desc)) { AnjutaPluginDescription *backend_desc; gchar *location = NULL; IAnjutaProjectBackend *plugin; gint backend_val; backend_desc = (AnjutaPluginDescription *)desc->data; anjuta_plugin_description_get_string (backend_desc, "Anjuta Plugin", "Location", &location); plugin = (IAnjutaProjectBackend *)anjuta_plugin_manager_get_plugin_by_id (plugin_manager, location); g_free (location); backend_val = ianjuta_project_backend_probe (plugin, file, NULL); if (backend_val > found) { /* Backend found */; backend = plugin; found = backend_val; } } g_list_free (descs); } else { /* A backend is already loaded, use it */ backend = IANJUTA_PROJECT_BACKEND (anjuta_shell_get_object (project->plugin->shell, "IAnjutaProjectBackend", NULL)); g_object_ref (backend); } if (!backend) { /* FIXME: Set err */ g_warning ("no backend available for this project\n"); return FALSE; } DEBUG_PRINT ("%s", "Creating new gbf project\n"); project->project = ianjuta_project_backend_new_project (backend, file, NULL); if (!project->project) { /* FIXME: Set err */ g_warning ("project creation failed\n"); return FALSE; } g_signal_connect (G_OBJECT (project->project), "file-changed", G_CALLBACK (on_file_changed), project); g_signal_connect (G_OBJECT (project->project), "node-loaded", G_CALLBACK (on_node_loaded), project); g_signal_connect (G_OBJECT (project->project), "node-changed", G_CALLBACK (on_node_changed), project); project->root = ianjuta_project_get_root (project->project, NULL); /* Export project root shell variable */ g_value_init (&value, G_TYPE_OBJECT); g_value_set_object (&value, project->project); anjuta_shell_add_value (project->plugin->shell, IANJUTA_PROJECT_MANAGER_CURRENT_PROJECT, &value, NULL); g_value_unset(&value); g_value_init (&value, G_TYPE_STRING); g_value_set_string (&value, ANJUTA_PLUGIN_PROJECT_MANAGER (project->plugin)->project_root_uri); anjuta_shell_add_value (project->plugin->shell, IANJUTA_PROJECT_MANAGER_PROJECT_ROOT_URI, &value, NULL); g_value_unset(&value); ianjuta_project_load_node (project->project, project->root, NULL); return TRUE; }