diff --git a/ChangeLog-20000414 b/ChangeLog-20000414 index 78635b3dc182f724f652cd69e930b4f0c95a571b..1804d8630c81ba438c4c7d4a5b94b90b8b0bcd30 100644 --- a/ChangeLog-20000414 +++ b/ChangeLog-20000414 @@ -1,3 +1,20 @@ +1999-12-19 Havoc Pennington + + * src/file-manager/desktop-canvas.c + (desktop_canvas_load_desktop_icons): new function, loads icons + from a given directory - don't get too excited, it doesn't yet + _display_ any icons! + + * src/file-manager/desktop-canvas.h: Add directory list field. + + * src/file-manager/Makefile.am (gnome_desktop_SOURCES): Add + fm-directory-list.[hc] + (libntl_file_manager_la_SOURCES): add fm_directory_list.[hc] + + * src/file-manager/fm-directory-list.h, fm-directory-list.c: + New files, the non-GUI portion of a directory listing. Handles + loading the dir listing and the icons. + 1999-12-17 Maciej Stachowiak * src/ntl-window.c, src/ntl-window-msgs.c: Added up, reload, home, diff --git a/src/file-manager/Makefile.am b/src/file-manager/Makefile.am index 8335b3c23d03b378d46155d31821c771e33f9d9c..1113d4e6d35564e71335ed46823d7d6327bbc53e 100644 --- a/src/file-manager/Makefile.am +++ b/src/file-manager/Makefile.am @@ -13,6 +13,8 @@ dfos_corba_srcs= \ GNOME_Desktop_FileOperationService-common.c libntl_file_manager_la_SOURCES= \ + fm-directory-list.h \ + fm-directory-list.c \ fm-icon-cache.c \ fm-icon-cache.h \ desktop-canvas.c \ @@ -44,6 +46,10 @@ gnome_desktop_SOURCES= \ desktop-menu.c \ desktop-window.c \ desktop-window.h \ + fm-directory-list.h \ + fm-directory-list.c \ + fm-icon-cache.c \ + fm-icon-cache.h \ gnome-desktop.c gnome_desktop_LDADD=\ diff --git a/src/file-manager/desktop-canvas.c b/src/file-manager/desktop-canvas.c index a9fe1f3a338e5e1b88e4183b2819021d132176c5..4ab19d9d595f32215519e7b7565c75e44b7cee28 100644 --- a/src/file-manager/desktop-canvas.c +++ b/src/file-manager/desktop-canvas.c @@ -95,6 +95,9 @@ desktop_canvas_init (DesktopCanvas *dcanvas) /* the attachment holds a refcount and eventually destroys the popup */ gnome_popup_menu_attach(dcanvas->popup, GTK_WIDGET(dcanvas), NULL); + + dcanvas->desktop_dir_list = NULL; + dcanvas->entries_loaded_id = 0; } static void @@ -111,7 +114,15 @@ desktop_canvas_destroy (GtkObject *object) gtk_idle_remove(canvas->background_update_idle); canvas->background_update_idle = 0; } - + + if (canvas->desktop_dir_list != NULL) { + gtk_object_unref(GTK_OBJECT(canvas->desktop_dir_list)); + gtk_signal_disconnect(GTK_OBJECT(canvas->desktop_dir_list), + canvas->entries_loaded_id); + canvas->desktop_dir_list = NULL; + canvas->entries_loaded_id = 0; + } + (* GTK_OBJECT_CLASS(parent_class)->destroy) (object); } @@ -175,6 +186,49 @@ desktop_canvas_size_allocate(GtkWidget *widget, allocation); } +static void +entries_loaded_cb(FMDirectoryList *dlist, + GSList *entries, + gpointer data) +{ + DesktopCanvas *canvas = data; + + g_assert(canvas != NULL); + + printf("loaded some entries\n"); +} + +void +desktop_canvas_load_desktop_icons(DesktopCanvas *canvas, const gchar *uri) +{ + g_return_if_fail(canvas != NULL); + g_return_if_fail(DESKTOP_IS_CANVAS(canvas)); + + if (canvas->desktop_dir_list != NULL) { + gtk_object_unref(GTK_OBJECT(canvas->desktop_dir_list)); + gtk_signal_disconnect(GTK_OBJECT(canvas->desktop_dir_list), + canvas->entries_loaded_id); + canvas->desktop_dir_list = NULL; + canvas->entries_loaded_id = 0; + } + + if (uri != NULL) { + canvas->desktop_dir_list = fm_directory_list_new(); + + gtk_object_ref(GTK_OBJECT(canvas->desktop_dir_list)); + gtk_object_sink(GTK_OBJECT(canvas->desktop_dir_list)); + + canvas->entries_loaded_id = + gtk_signal_connect(GTK_OBJECT(canvas->desktop_dir_list), + "entries_loaded", + (GtkSignalFunc)entries_loaded_cb, + canvas); + + fm_directory_list_load_uri(canvas->desktop_dir_list, + uri); + } +} + /* * Background accessor functions */ diff --git a/src/file-manager/desktop-canvas.h b/src/file-manager/desktop-canvas.h index c4ca0a129320bdf37dbbd669640f3916e4157068..696d1ddce5e542807fa0c695b677312e9a94480f 100644 --- a/src/file-manager/desktop-canvas.h +++ b/src/file-manager/desktop-canvas.h @@ -26,6 +26,7 @@ #include #include #include "desktop-layout.h" +#include "fm-directory-list.h" BEGIN_GNOME_DECLS @@ -91,6 +92,9 @@ struct _DesktopCanvas { GtkWidget *popup; DesktopLayout *layout; + + FMDirectoryList *desktop_dir_list; + guint entries_loaded_id; }; struct _DesktopCanvasClass { @@ -98,11 +102,14 @@ struct _DesktopCanvasClass { }; -/* Standard Gtk function */ -GtkType desktop_canvas_get_type (void); +/* Standard Gtk functions */ -GtkWidget *desktop_canvas_new (void); +GtkType desktop_canvas_get_type (void); +GtkWidget *desktop_canvas_new (void); +/* Desktop stuff */ +void desktop_canvas_load_desktop_icons (DesktopCanvas *canvas, + const gchar *uri); /* The get/set functions here are not tied to our IDL interface or to GConf; these get/set functions are purely to update this "view" diff --git a/src/file-manager/fm-icon-cache.h b/src/file-manager/fm-icon-cache.h index a61e75fd4e16f8c8022ba8c9de5202c41c4a6acf..ec39a608d6171bdfb6a5173cdabcb1244e8608f0 100644 --- a/src/file-manager/fm-icon-cache.h +++ b/src/file-manager/fm-icon-cache.h @@ -35,7 +35,7 @@ void fm_icon_cache_set_theme (FMIconCache *fmic, GdkPixbuf * fm_icon_cache_get_icon (FMIconCache *fmic, const GnomeVFSFileInfo *info); -FMIconCache*fm_get_current_icon_cache (void); +FMIconCache* fm_get_current_icon_cache (void); #endif diff --git a/src/file-manager/gnome-desktop.c b/src/file-manager/gnome-desktop.c index 808f3cccd30df09a112c5a960e2c9df9e5c711b7..5c29ef5e531f295cc3e0eba4b805e663ea3ebf6a 100644 --- a/src/file-manager/gnome-desktop.c +++ b/src/file-manager/gnome-desktop.c @@ -28,6 +28,7 @@ #endif #include +#include #include "desktop-window.h" #include "desktop-canvas.h" @@ -44,11 +45,16 @@ main (int argc, char *argv[]) { GtkWidget *window; GtkWidget *canvas; - + CORBA_Environment ev; + (void)bindtextdomain (PACKAGE, PACKAGE_LOCALE_DIR); (void)textdomain (PACKAGE); + + CORBA_exception_init(&ev); - gnome_init ("gnome-desktop", VERSION, argc, argv); + gnome_CORBA_init ("gnome-desktop", VERSION, &argc, argv, + GNORBA_INIT_SERVER_FUNC, &ev); + gnome_vfs_init(); window = desktop_window_new(); canvas = desktop_canvas_new(); @@ -56,6 +62,9 @@ main (int argc, char *argv[]) gtk_container_add(GTK_CONTAINER(window), canvas); desktop_canvas_set_solid_background_color(DESKTOP_CANVAS(canvas), 0xFF0000); + + desktop_canvas_load_desktop_icons(DESKTOP_CANVAS (canvas), + "file:/home/hp"); gtk_signal_connect(GTK_OBJECT(window), "delete_event", GTK_SIGNAL_FUNC(delete_event_cb), NULL);