コード例 #1
0
ファイル: plugin.c プロジェクト: GNOME/anjuta-extras
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);
}
コード例 #2
0
ファイル: shell.c プロジェクト: rosedu/anjuta
static void
anjuta_test_shell_add_value (AnjutaShell *shell,
							 const char *name,
							 const GValue *value,
							 GError **error)
{
	GValue *copy;
	AnjutaTestShell *window = ANJUTA_TEST_SHELL (shell);

	anjuta_shell_remove_value (shell, name, error);
	
	copy = g_new0 (GValue, 1);
	g_value_init (copy, value->g_type);
	g_value_copy (value, copy);

	g_hash_table_insert (window->values, g_strdup (name), copy);
	g_signal_emit_by_name (shell, "value_added", name, copy);
}
コード例 #3
0
ファイル: project.c プロジェクト: rosedu/anjuta
gboolean 
anjuta_pm_project_unload (AnjutaPmProject *project, GError **error)
{
	/* Remove value from Anjuta shell */
	anjuta_shell_remove_value (project->plugin->shell,
	                           IANJUTA_PROJECT_MANAGER_CURRENT_PROJECT,
	                           NULL);
	
	if (project->project) g_object_unref (project->project);
	project->project = NULL;
	project->loaded = FALSE;
	project->node_capabilities = 0;
	
	/* Remove project properties dialogs */
	if (project->properties_dialog != NULL) gtk_widget_destroy (project->properties_dialog);
	project->properties_dialog = NULL;
	
	return TRUE;
}
コード例 #4
0
ファイル: plugin.c プロジェクト: rosedu/anjuta
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);		
	}
}