Using icons from the VFS API
This commit is contained in:
parent
afb16412ac
commit
40f334de40
|
@ -35,7 +35,7 @@ cvs.so: $(cvs_OBJS)
|
||||||
|
|
||||||
dirtree_OBJS = dirtree.o
|
dirtree_OBJS = dirtree.o
|
||||||
dirtree_CFLAGS = $(CPPFLAGSF) $(CPPFLAGS) $(CFLAGSF) $(CFLAGS)
|
dirtree_CFLAGS = $(CPPFLAGSF) $(CPPFLAGS) $(CFLAGSF) $(CFLAGS)
|
||||||
dirtree_LDFLAGS = $(LDFLAGSF) $(LDFLAGS)
|
dirtree_LDFLAGS = $(LDFLAGSF) $(LDFLAGS) -L .. -Wl,-rpath,$(LIBDIR) -lBrowser
|
||||||
|
|
||||||
dirtree.so: $(dirtree_OBJS)
|
dirtree.so: $(dirtree_OBJS)
|
||||||
$(CCSHARED) -o dirtree.so $(dirtree_OBJS) $(dirtree_LDFLAGS)
|
$(CCSHARED) -o dirtree.so $(dirtree_OBJS) $(dirtree_LDFLAGS)
|
||||||
|
|
|
@ -15,11 +15,10 @@
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#include <System.h>
|
|
||||||
#include <dirent.h>
|
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include <libintl.h>
|
#include <libintl.h>
|
||||||
|
#include <System.h>
|
||||||
#include "Browser.h"
|
#include "Browser.h"
|
||||||
#define _(string) gettext(string)
|
#define _(string) gettext(string)
|
||||||
#define N_(string) (string)
|
#define N_(string) (string)
|
||||||
|
@ -31,6 +30,7 @@
|
||||||
typedef struct _BrowserPlugin
|
typedef struct _BrowserPlugin
|
||||||
{
|
{
|
||||||
BrowserPluginHelper * helper;
|
BrowserPluginHelper * helper;
|
||||||
|
Mime * mime;
|
||||||
GtkWidget * widget;
|
GtkWidget * widget;
|
||||||
guint source;
|
guint source;
|
||||||
gboolean expanding;
|
gboolean expanding;
|
||||||
|
@ -99,6 +99,7 @@ static Dirtree * _dirtree_init(BrowserPluginHelper * helper)
|
||||||
if((dirtree = object_new(sizeof(*dirtree))) == NULL)
|
if((dirtree = object_new(sizeof(*dirtree))) == NULL)
|
||||||
return NULL;
|
return NULL;
|
||||||
dirtree->helper = helper;
|
dirtree->helper = helper;
|
||||||
|
dirtree->mime = helper->get_mime(helper->browser);
|
||||||
dirtree->source = 0;
|
dirtree->source = 0;
|
||||||
dirtree->expanding = FALSE;
|
dirtree->expanding = FALSE;
|
||||||
icontheme = gtk_icon_theme_get_default();
|
icontheme = gtk_icon_theme_get_default();
|
||||||
|
@ -232,6 +233,7 @@ static gboolean _dirtree_refresh_folder(Dirtree * dirtree, GtkTreeIter * parent,
|
||||||
gboolean ret = FALSE;
|
gboolean ret = FALSE;
|
||||||
DIR * dir;
|
DIR * dir;
|
||||||
struct dirent * de;
|
struct dirent * de;
|
||||||
|
struct stat st;
|
||||||
GtkTreeModel * model = GTK_TREE_MODEL(dirtree->store);
|
GtkTreeModel * model = GTK_TREE_MODEL(dirtree->store);
|
||||||
GtkTreeIter iter;
|
GtkTreeIter iter;
|
||||||
GtkTreePath * s;
|
GtkTreePath * s;
|
||||||
|
@ -240,6 +242,7 @@ static gboolean _dirtree_refresh_folder(Dirtree * dirtree, GtkTreeIter * parent,
|
||||||
String * q;
|
String * q;
|
||||||
gchar * r;
|
gchar * r;
|
||||||
gboolean b;
|
gboolean b;
|
||||||
|
GdkPixbuf * pixbuf;
|
||||||
|
|
||||||
#ifdef DEBUG
|
#ifdef DEBUG
|
||||||
fprintf(stderr, "DEBUG: %s(parent, \"%s\", \"%s\", %s)\n", __func__,
|
fprintf(stderr, "DEBUG: %s(parent, \"%s\", \"%s\", %s)\n", __func__,
|
||||||
|
@ -250,29 +253,34 @@ static gboolean _dirtree_refresh_folder(Dirtree * dirtree, GtkTreeIter * parent,
|
||||||
valid == TRUE;
|
valid == TRUE;
|
||||||
valid = gtk_tree_model_iter_next(model, &iter))
|
valid = gtk_tree_model_iter_next(model, &iter))
|
||||||
gtk_tree_store_set(dirtree->store, &iter, 3, FALSE, -1);
|
gtk_tree_store_set(dirtree->store, &iter, 3, FALSE, -1);
|
||||||
if((dir = opendir(path)) == NULL)
|
if((dir = browser_vfs_opendir(path, NULL)) == NULL)
|
||||||
return FALSE;
|
return FALSE;
|
||||||
if(strcmp(path, "/") == 0) /* XXX hack */
|
if(strcmp(path, "/") == 0) /* XXX hack */
|
||||||
path = "";
|
path = "";
|
||||||
while((de = readdir(dir)) != NULL)
|
while((de = browser_vfs_readdir(dir)) != NULL)
|
||||||
{
|
{
|
||||||
/* skip hidden folders except if we traverse it */
|
/* skip hidden folders except if we traverse it */
|
||||||
if(basename != NULL && strcmp(de->d_name, basename) == 0)
|
if(basename != NULL && strcmp(de->d_name, basename) == 0)
|
||||||
ret = TRUE;
|
ret = TRUE;
|
||||||
else if(de->d_name[0] == '.')
|
else if(de->d_name[0] == '.')
|
||||||
continue;
|
continue;
|
||||||
/* XXX d_type is not portable */
|
if((q = string_new_append(path, "/", de->d_name, NULL)) != NULL
|
||||||
else if(de->d_type != DT_DIR)
|
&& browser_vfs_lstat(q, &st) == 0)
|
||||||
|
{
|
||||||
|
if(!S_ISDIR(st.st_mode))
|
||||||
continue;
|
continue;
|
||||||
q = string_new_append(path, "/", de->d_name, NULL);
|
pixbuf = browser_vfs_mime_icon(dirtree->mime, q, NULL,
|
||||||
|
&st, NULL, 24);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
pixbuf = dirtree->folder;
|
||||||
/* FIXME check if the node already exists */
|
/* FIXME check if the node already exists */
|
||||||
r = (q != NULL) ? g_filename_display_basename(q) : NULL;
|
r = (q != NULL) ? g_filename_display_basename(q) : NULL;
|
||||||
gtk_tree_store_insert(dirtree->store, &iter, parent, -1);
|
gtk_tree_store_insert(dirtree->store, &iter, parent, -1);
|
||||||
gtk_tree_store_set(dirtree->store, &iter,
|
gtk_tree_store_set(dirtree->store, &iter, DC_ICON, pixbuf,
|
||||||
DC_ICON, dirtree->folder,
|
|
||||||
DC_NAME, (r != NULL) ? r : de->d_name,
|
DC_NAME, (r != NULL) ? r : de->d_name,
|
||||||
DC_PATH, q, DC_UPDATED, TRUE, -1);
|
DC_PATH, q, DC_UPDATED, TRUE, -1);
|
||||||
if(recurse)
|
if(recurse && q != NULL)
|
||||||
_dirtree_refresh_folder(dirtree, &iter, q, NULL,
|
_dirtree_refresh_folder(dirtree, &iter, q, NULL,
|
||||||
(basename != NULL) ? TRUE : FALSE);
|
(basename != NULL) ? TRUE : FALSE);
|
||||||
g_free(r);
|
g_free(r);
|
||||||
|
@ -284,7 +292,7 @@ static gboolean _dirtree_refresh_folder(Dirtree * dirtree, GtkTreeIter * parent,
|
||||||
gtk_tree_path_free(s);
|
gtk_tree_path_free(s);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
closedir(dir);
|
browser_vfs_closedir(dir);
|
||||||
/* remove all the obsolete nodes */
|
/* remove all the obsolete nodes */
|
||||||
for(valid = gtk_tree_model_iter_children(model, &iter, parent);
|
for(valid = gtk_tree_model_iter_children(model, &iter, parent);
|
||||||
valid == TRUE; valid = (b == TRUE)
|
valid == TRUE; valid = (b == TRUE)
|
||||||
|
|
|
@ -24,6 +24,7 @@ depends=common.c,../../include/Browser.h
|
||||||
[dirtree]
|
[dirtree]
|
||||||
type=plugin
|
type=plugin
|
||||||
sources=dirtree.c
|
sources=dirtree.c
|
||||||
|
ldflags=-L .. -Wl,-rpath,$(LIBDIR) -lBrowser
|
||||||
install=$(LIBDIR)/Browser/plugins
|
install=$(LIBDIR)/Browser/plugins
|
||||||
|
|
||||||
[dirtree.c]
|
[dirtree.c]
|
||||||
|
|
Loading…
Reference in New Issue
Block a user