Improving the directory tree
This commit is contained in:
parent
5d4f696561
commit
0898723e8a
4
po/de.po
4
po/de.po
|
@ -7,7 +7,7 @@ msgid ""
|
|||
msgstr ""
|
||||
"Project-Id-Version: Browser 0.1.4\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2011-07-30 04:08+0200\n"
|
||||
"POT-Creation-Date: 2011-07-30 16:11+0200\n"
|
||||
"PO-Revision-Date: 2010-03-29 23:28+0200\n"
|
||||
"Last-Translator: Pierre Pronchery <khorben@defora.org>\n"
|
||||
"Language-Team: English\n"
|
||||
|
@ -764,7 +764,7 @@ msgstr ""
|
|||
msgid "Command exited with signal %d"
|
||||
msgstr ""
|
||||
|
||||
#: ../src/plugins/dirtree.c:50
|
||||
#: ../src/plugins/dirtree.c:54
|
||||
msgid "Directory tree"
|
||||
msgstr ""
|
||||
|
||||
|
|
4
po/es.po
4
po/es.po
|
@ -7,7 +7,7 @@ msgid ""
|
|||
msgstr ""
|
||||
"Project-Id-Version: Browser 0.1.4\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2011-07-30 04:08+0200\n"
|
||||
"POT-Creation-Date: 2011-07-30 16:11+0200\n"
|
||||
"PO-Revision-Date: 2010-03-30 01:04+0200\n"
|
||||
"Last-Translator: Pierre Pronchery <khorben@defora.org>\n"
|
||||
"Language-Team: Spanish\n"
|
||||
|
@ -764,7 +764,7 @@ msgstr ""
|
|||
msgid "Command exited with signal %d"
|
||||
msgstr ""
|
||||
|
||||
#: ../src/plugins/dirtree.c:50
|
||||
#: ../src/plugins/dirtree.c:54
|
||||
msgid "Directory tree"
|
||||
msgstr ""
|
||||
|
||||
|
|
4
po/fr.po
4
po/fr.po
|
@ -7,7 +7,7 @@ msgid ""
|
|||
msgstr ""
|
||||
"Project-Id-Version: Browser 0.1.4\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2011-07-30 04:08+0200\n"
|
||||
"POT-Creation-Date: 2011-07-30 16:11+0200\n"
|
||||
"PO-Revision-Date: 2010-03-29 23:28+0200\n"
|
||||
"Last-Translator: Pierre Pronchery <khorben@defora.org>\n"
|
||||
"Language-Team: French\n"
|
||||
|
@ -798,7 +798,7 @@ msgstr "La commande a terminé avec le code d'erreur %d"
|
|||
msgid "Command exited with signal %d"
|
||||
msgstr "La commande a été terminée par le signal %d"
|
||||
|
||||
#: ../src/plugins/dirtree.c:50
|
||||
#: ../src/plugins/dirtree.c:54
|
||||
msgid "Directory tree"
|
||||
msgstr "Arborescence"
|
||||
|
||||
|
|
4
po/it.po
4
po/it.po
|
@ -7,7 +7,7 @@ msgid ""
|
|||
msgstr ""
|
||||
"Project-Id-Version: Browser 0.1.4\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2011-07-30 04:08+0200\n"
|
||||
"POT-Creation-Date: 2011-07-30 16:11+0200\n"
|
||||
"PO-Revision-Date: 2010-04-07 23:18+0200\n"
|
||||
"Last-Translator: Pierre Pronchery <khorben@defora.org>\n"
|
||||
"Language-Team: Italian\n"
|
||||
|
@ -764,7 +764,7 @@ msgstr ""
|
|||
msgid "Command exited with signal %d"
|
||||
msgstr ""
|
||||
|
||||
#: ../src/plugins/dirtree.c:50
|
||||
#: ../src/plugins/dirtree.c:54
|
||||
msgid "Directory tree"
|
||||
msgstr ""
|
||||
|
||||
|
|
|
@ -42,7 +42,8 @@ static void _dirtree_destroy(BrowserPlugin * plugin);
|
|||
static void _dirtree_refresh(BrowserPlugin * plugin, char const * path);
|
||||
|
||||
/* callbacks */
|
||||
static void _dirtree_on_selection_changed(gpointer data);
|
||||
static void _dirtree_on_row_activated(GtkTreeView * view, GtkTreePath * path,
|
||||
GtkTreeViewColumn * column, gpointer data);
|
||||
|
||||
|
||||
/* public */
|
||||
|
@ -108,8 +109,8 @@ static GtkWidget * _dirtree_init(BrowserPlugin * plugin)
|
|||
gtk_tree_view_append_column(GTK_TREE_VIEW(dirtree->view), column);
|
||||
treesel = gtk_tree_view_get_selection(GTK_TREE_VIEW(dirtree->view));
|
||||
gtk_tree_selection_set_mode(treesel, GTK_SELECTION_SINGLE);
|
||||
g_signal_connect_swapped(treesel, "changed", G_CALLBACK(
|
||||
_dirtree_on_selection_changed), plugin);
|
||||
g_signal_connect(dirtree->view, "row-activated", G_CALLBACK(
|
||||
_dirtree_on_row_activated), plugin);
|
||||
gtk_scrolled_window_add_with_viewport(GTK_SCROLLED_WINDOW(widget),
|
||||
dirtree->view);
|
||||
gtk_widget_show_all(widget);
|
||||
|
@ -171,12 +172,15 @@ static void _dirtree_refresh(BrowserPlugin * plugin, char const * path)
|
|||
static gboolean _refresh_child(Dirtree * dirtree, GtkTreeIter * parent,
|
||||
char const * path, char const * basename)
|
||||
{
|
||||
gboolean ret = FALSE;
|
||||
DIR * dir;
|
||||
struct dirent * de;
|
||||
GtkTreeModel * model = GTK_TREE_MODEL(dirtree->store);
|
||||
GtkTreeIter iter;
|
||||
gboolean valid;
|
||||
GtkTreePath * p = NULL;
|
||||
String * q;
|
||||
gchar * r;
|
||||
|
||||
for(valid = gtk_tree_model_iter_children(model, &iter, parent);
|
||||
valid == TRUE;
|
||||
|
@ -185,41 +189,44 @@ static gboolean _refresh_child(Dirtree * dirtree, GtkTreeIter * parent,
|
|||
return FALSE;
|
||||
while((de = readdir(dir)) != NULL)
|
||||
{
|
||||
/* skip hidden folders except if we traverse it */
|
||||
if(de->d_name[0] == '.' && strcmp(de->d_name, basename) != 0)
|
||||
continue;
|
||||
if(de->d_type != DT_DIR) /* XXX d_type is not portable */
|
||||
continue;
|
||||
q = string_new_append(path, "/", de->d_name, NULL);
|
||||
r = (q != NULL) ? g_filename_display_basename(q) : NULL;
|
||||
gtk_tree_store_insert(dirtree->store, &iter, parent, -1);
|
||||
gtk_tree_store_set(dirtree->store, &iter, 0, dirtree->folder,
|
||||
/* XXX may not be valid UTF-8, need full path */
|
||||
1, de->d_name, -1);
|
||||
1, (r != NULL) ? r : de->d_name, 2, q, -1);
|
||||
/* remember the folder we mean to traverse */
|
||||
if(p == NULL && strcmp(de->d_name, basename) == 0)
|
||||
p = gtk_tree_model_get_path(model, &iter);
|
||||
g_free(r);
|
||||
string_delete(q);
|
||||
}
|
||||
closedir(dir);
|
||||
if(p == NULL)
|
||||
return FALSE;
|
||||
gtk_tree_view_expand_to_path(GTK_TREE_VIEW(dirtree->view), p);
|
||||
gtk_tree_model_get_iter(model, parent, p); /* XXX may fail */
|
||||
ret = gtk_tree_model_get_iter(model, parent, p);
|
||||
gtk_tree_path_free(p);
|
||||
return TRUE;
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
||||
/* callbacks */
|
||||
/* dirtree_on_selection_changed */
|
||||
static void _dirtree_on_selection_changed(gpointer data)
|
||||
/* dirtree_on_row_activated */
|
||||
static void _dirtree_on_row_activated(GtkTreeView * view, GtkTreePath * path,
|
||||
GtkTreeViewColumn * column, gpointer data)
|
||||
{
|
||||
BrowserPlugin * plugin = data;
|
||||
Dirtree * dirtree = plugin->priv;
|
||||
GtkTreeSelection * treesel;
|
||||
GtkTreeModel * model;
|
||||
GtkTreeModel * model = GTK_TREE_MODEL(dirtree->store);
|
||||
GtkTreeIter iter;
|
||||
gchar * location;
|
||||
|
||||
treesel = gtk_tree_view_get_selection(GTK_TREE_VIEW(dirtree->view));
|
||||
if(gtk_tree_selection_get_selected(treesel, &model, &iter) != TRUE)
|
||||
return;
|
||||
gtk_tree_model_get_iter(model, &iter, path);
|
||||
gtk_tree_model_get(model, &iter, 2, &location, -1);
|
||||
plugin->helper->set_location(plugin->helper->browser, location);
|
||||
g_free(location);
|
||||
|
|
Loading…
Reference in New Issue
Block a user