コード例 #1
0
ファイル: ui_pathsel.c プロジェクト: tomaszg7/geeqie
static void dest_change_dir(Dest_Data *dd, const gchar *path, gboolean retain_name)
{
	const gchar *old_name = NULL;
	gchar *full_path;
	gchar *new_directory;

	if (retain_name)
		{
		const gchar *buf = gtk_entry_get_text(GTK_ENTRY(dd->entry));

		if (!isdir(buf)) old_name = filename_from_path(buf);
		}

	full_path = g_build_filename(path, old_name, NULL);
	if (old_name)
		new_directory = g_path_get_dirname(full_path);
	else
		new_directory = g_strdup(full_path);

	gtk_entry_set_text(GTK_ENTRY(dd->entry), full_path);

	dest_populate(dd, new_directory);
	g_free(new_directory);

	if (old_name)
		{
		gchar *basename = g_path_get_basename(full_path);

		gtk_editable_select_region(GTK_EDITABLE(dd->entry), strlen(full_path) - strlen(basename), strlen(full_path));
		g_free(basename);
		}

	g_free(full_path);
}
コード例 #2
0
ファイル: ui_pathsel.c プロジェクト: thaidao/Workspace_Ex
static void dest_change_dir(Dest_Data *dd, const gchar *path, gint retain_name)
{
	gchar *old_name = NULL;
	gint s = 0;

	if (retain_name)
		{
		const gchar *buf = gtk_entry_get_text(GTK_ENTRY(dd->entry));
		if (!isdir(buf))
			{
			if (path && strcmp(path, "/") == 0)
				{
				old_name = g_strdup(filename_from_path(buf));
				}
			else
				{
				old_name = g_strconcat("/", filename_from_path(buf), NULL);
				s = 1;
				}
			}
		}

	gtk_entry_set_text(GTK_ENTRY(dd->entry), path);

	dest_populate(dd, path);

	/* remember filename */
	if (old_name)
		{
		gint pos = -1;
		gtk_editable_insert_text(GTK_EDITABLE(dd->entry), old_name, -1, &pos);
		gtk_editable_select_region(GTK_EDITABLE(dd->entry), strlen(path) + s, strlen(path) + strlen(old_name));
		g_free(old_name);
		}
}