mirror of
https://gitlab.gnome.org/GNOME/nautilus
synced 2024-10-01 13:34:16 +00:00
Hmm, it sort of does something.
1999-12-19 Havoc Pennington <hp@pobox.com> * src/file-manager/desktop-layout.c: don't do an arrangement on every change * src/file-manager/desktop-canvas.c (desktop_canvas_load_desktop_icons): connect to finished_load and arrange the icons when we get it. This is a temporary hack, because the DesktopLayout engine isn't progressive yet. * src/file-manager/fm-directory-list.c (fm_directory_list_class_init): add a finished_load signal * src/file-manager/desktop-window.c (desktop_window_init): for now, don't fill the whole screen so we can see gdb. * src/file-manager/desktop-item.c: Move user data accessors into the .c file, these are private.
This commit is contained in:
parent
a82b8a9b18
commit
62748a9c8b
|
@ -26,6 +26,7 @@
|
|||
#include <gtk/gtk.h>
|
||||
#include "desktop-menu.h"
|
||||
#include "fm-icon-cache.h"
|
||||
#include "desktop-item.h"
|
||||
|
||||
static void desktop_canvas_class_init (DesktopCanvasClass *class);
|
||||
static void desktop_canvas_init (DesktopCanvas *dcanvas);
|
||||
|
@ -101,6 +102,7 @@ desktop_canvas_init (DesktopCanvas *dcanvas)
|
|||
|
||||
dcanvas->desktop_dir_list = NULL;
|
||||
dcanvas->entries_loaded_id = 0;
|
||||
dcanvas->finished_load_id = 0;
|
||||
}
|
||||
|
||||
static void
|
||||
|
@ -122,8 +124,11 @@ desktop_canvas_destroy (GtkObject *object)
|
|||
gtk_object_unref(GTK_OBJECT(canvas->desktop_dir_list));
|
||||
gtk_signal_disconnect(GTK_OBJECT(canvas->desktop_dir_list),
|
||||
canvas->entries_loaded_id);
|
||||
gtk_signal_disconnect(GTK_OBJECT(canvas->desktop_dir_list),
|
||||
canvas->finished_load_id);
|
||||
canvas->desktop_dir_list = NULL;
|
||||
canvas->entries_loaded_id = 0;
|
||||
canvas->finished_load_id = 0;
|
||||
}
|
||||
|
||||
(* GTK_OBJECT_CLASS(parent_class)->destroy) (object);
|
||||
|
@ -193,16 +198,85 @@ desktop_canvas_size_allocate(GtkWidget *widget,
|
|||
allocation);
|
||||
}
|
||||
|
||||
static void
|
||||
dicon_size_request(DesktopLayoutItem *layout_item,
|
||||
gint *x, gint *y, gint *width, gint *height,
|
||||
gpointer user_data)
|
||||
{
|
||||
DesktopItem *icon = user_data;
|
||||
|
||||
desktop_item_size_request(icon, x, y, width, height);
|
||||
|
||||
printf("size req: %d,%d %dx%d\n", *x, *y, *width, *height);
|
||||
}
|
||||
|
||||
static void
|
||||
dicon_size_allocate(DesktopLayoutItem *layout_item,
|
||||
gint x, gint y, gint width, gint height,
|
||||
gpointer user_data)
|
||||
{
|
||||
DesktopItem *icon = user_data;
|
||||
|
||||
desktop_item_size_allocate(icon, x, y, width, height);
|
||||
|
||||
printf("size alloc: %d,%d %dx%d\n", x, y, width, height);
|
||||
}
|
||||
|
||||
static void
|
||||
dicon_destroy_notify(gpointer data)
|
||||
{
|
||||
DesktopItem *icon = data;
|
||||
|
||||
desktop_item_unref(icon);
|
||||
}
|
||||
|
||||
static void
|
||||
entries_loaded_cb(FMDirectoryList *dlist,
|
||||
GSList *entries,
|
||||
gpointer data)
|
||||
{
|
||||
DesktopCanvas *canvas = data;
|
||||
GSList *iter;
|
||||
|
||||
g_assert(canvas != NULL);
|
||||
|
||||
printf("loaded some entries\n");
|
||||
iter = entries;
|
||||
while (iter != NULL) {
|
||||
FMDirectoryListEntry *entry = iter->data;
|
||||
DesktopItem *icon;
|
||||
DesktopLayoutItem *layout_item;
|
||||
|
||||
printf("entry: %s\n",
|
||||
fm_directory_list_entry_get_name(entry));
|
||||
|
||||
icon = desktop_icon_new();
|
||||
|
||||
desktop_icon_set_icon(icon, fm_directory_list_entry_get_icon(entry));
|
||||
desktop_icon_set_name(icon, fm_directory_list_entry_get_name(entry));
|
||||
|
||||
layout_item = desktop_layout_item_new(dicon_size_request,
|
||||
dicon_size_allocate,
|
||||
dicon_destroy_notify,
|
||||
icon);
|
||||
|
||||
desktop_layout_add_item(canvas->layout,
|
||||
layout_item);
|
||||
|
||||
desktop_layout_item_unref(layout_item);
|
||||
|
||||
/* sort of a hack to have this here */
|
||||
desktop_item_realize(icon, GNOME_CANVAS_GROUP(GNOME_CANVAS(canvas)->root));
|
||||
|
||||
iter = g_slist_next(iter);
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
finished_load_cb(FMDirectoryList *dlist, gpointer data)
|
||||
{
|
||||
DesktopCanvas *canvas = data;
|
||||
|
||||
desktop_layout_arrange(canvas->layout, FALSE);
|
||||
}
|
||||
|
||||
void
|
||||
|
@ -215,8 +289,11 @@ desktop_canvas_load_desktop_icons(DesktopCanvas *canvas, const gchar *uri)
|
|||
gtk_object_unref(GTK_OBJECT(canvas->desktop_dir_list));
|
||||
gtk_signal_disconnect(GTK_OBJECT(canvas->desktop_dir_list),
|
||||
canvas->entries_loaded_id);
|
||||
gtk_signal_disconnect(GTK_OBJECT(canvas->desktop_dir_list),
|
||||
canvas->finished_load_id);
|
||||
canvas->desktop_dir_list = NULL;
|
||||
canvas->entries_loaded_id = 0;
|
||||
canvas->finished_load_id = 0;
|
||||
}
|
||||
|
||||
if (uri != NULL) {
|
||||
|
@ -231,6 +308,12 @@ desktop_canvas_load_desktop_icons(DesktopCanvas *canvas, const gchar *uri)
|
|||
(GtkSignalFunc)entries_loaded_cb,
|
||||
canvas);
|
||||
|
||||
canvas->finished_load_id =
|
||||
gtk_signal_connect(GTK_OBJECT(canvas->desktop_dir_list),
|
||||
"finished_load",
|
||||
(GtkSignalFunc)finished_load_cb,
|
||||
canvas);
|
||||
|
||||
fm_directory_list_load_uri(canvas->desktop_dir_list,
|
||||
uri);
|
||||
}
|
||||
|
|
|
@ -95,6 +95,7 @@ struct _DesktopCanvas {
|
|||
|
||||
FMDirectoryList *desktop_dir_list;
|
||||
guint entries_loaded_id;
|
||||
guint finished_load_id;
|
||||
};
|
||||
|
||||
struct _DesktopCanvasClass {
|
||||
|
|
|
@ -24,6 +24,15 @@
|
|||
|
||||
#include <gdk-pixbuf/gnome-canvas-pixbuf.h>
|
||||
|
||||
|
||||
/* User data is used by the specific DesktopItem types */
|
||||
static void desktop_item_set_user_data (DesktopItem *item,
|
||||
gpointer user_data,
|
||||
GDestroyNotify destroy_notify_func);
|
||||
static gpointer desktop_item_get_user_data (DesktopItem *item);
|
||||
|
||||
|
||||
|
||||
typedef enum {
|
||||
DESKTOP_ITEM_NONE,
|
||||
DESKTOP_ITEM_ICON
|
||||
|
@ -229,7 +238,12 @@ icon_realize (DesktopItem *item, GnomeCanvasGroup *group)
|
|||
gnome_canvas_pixbuf_get_type(),
|
||||
"x", 0.0, "y", 0.0,
|
||||
"pixbuf", icon->pixbuf,
|
||||
"width", icon->pixbuf ?
|
||||
(double)gdk_pixbuf_get_width(icon->pixbuf) : 10.0,
|
||||
"height", icon->pixbuf ?
|
||||
(double)gdk_pixbuf_get_height(icon->pixbuf) : 10.0,
|
||||
"x_set", TRUE, "y_set", TRUE,
|
||||
"width_set", TRUE, "height_set", TRUE,
|
||||
NULL);
|
||||
|
||||
}
|
||||
|
@ -284,11 +298,10 @@ icon_size_allocate (DesktopItem *item,
|
|||
|
||||
if (item->canvas_item) {
|
||||
gnome_canvas_item_set (item->canvas_item,
|
||||
"x", x,
|
||||
"y", y,
|
||||
"width", width,
|
||||
"height", height,
|
||||
"width_set", TRUE, "height_set", TRUE,
|
||||
"x", (double)x,
|
||||
"y", (double)y,
|
||||
"width", (double)width,
|
||||
"height", (double)height,
|
||||
NULL);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -48,14 +48,6 @@ void desktop_item_size_request (DesktopItem *item,
|
|||
void desktop_item_size_allocate (DesktopItem *item,
|
||||
gint x, gint y, gint width, gint height);
|
||||
|
||||
|
||||
/* User data is used by the specific DesktopItem types */
|
||||
void desktop_item_set_user_data (DesktopItem *item,
|
||||
gpointer user_data,
|
||||
GDestroyNotify destroy_notify_func);
|
||||
gpointer desktop_item_get_user_data (DesktopItem *item);
|
||||
|
||||
|
||||
/* This is a specific DesktopItem type */
|
||||
DesktopItem* desktop_icon_new (void);
|
||||
void desktop_icon_set_icon (DesktopItem *item,
|
||||
|
|
|
@ -243,6 +243,11 @@ desktop_layout_unref (DesktopLayout *layout)
|
|||
}
|
||||
|
||||
/* FIXME changing any of this stuff requires a layout recomputation */
|
||||
static void
|
||||
queue_arrange(DesktopLayout *layout)
|
||||
{
|
||||
/* FIXME do something */
|
||||
}
|
||||
|
||||
void
|
||||
desktop_layout_set_size (DesktopLayout *layout,
|
||||
|
@ -256,7 +261,7 @@ desktop_layout_set_size (DesktopLayout *layout,
|
|||
layout->width = width;
|
||||
layout->height = height;
|
||||
|
||||
desktop_layout_arrange(layout, FALSE);
|
||||
queue_arrange(layout);
|
||||
}
|
||||
|
||||
void
|
||||
|
@ -269,7 +274,7 @@ desktop_layout_set_mode (DesktopLayout *layout,
|
|||
layout->hmode = hmode;
|
||||
layout->vmode = vmode;
|
||||
|
||||
desktop_layout_arrange(layout, FALSE);
|
||||
queue_arrange(layout);
|
||||
}
|
||||
|
||||
void
|
||||
|
@ -279,7 +284,7 @@ desktop_layout_add_item (DesktopLayout *layout,
|
|||
desktop_layout_item_ref(item);
|
||||
layout->items = g_list_prepend(layout->items, item);
|
||||
|
||||
desktop_layout_arrange(layout, FALSE);
|
||||
queue_arrange(layout);
|
||||
}
|
||||
|
||||
void
|
||||
|
@ -289,7 +294,7 @@ desktop_layout_remove_item (DesktopLayout *layout,
|
|||
layout->items = g_list_remove(layout->items, item);
|
||||
desktop_layout_item_unref(item);
|
||||
|
||||
desktop_layout_arrange(layout, FALSE);
|
||||
queue_arrange(layout);
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -87,8 +87,10 @@ desktop_window_init (DesktopWindow *dwindow)
|
|||
|
||||
/* Match the screen size */
|
||||
gtk_widget_set_usize(GTK_WIDGET(dwindow),
|
||||
350, 350
|
||||
/* FIXME hard to debug :-)
|
||||
gdk_screen_width(),
|
||||
gdk_screen_height());
|
||||
gdk_screen_height() */);
|
||||
}
|
||||
|
||||
GtkWidget*
|
||||
|
|
|
@ -55,16 +55,22 @@ main (int argc, char *argv[])
|
|||
gnome_CORBA_init ("gnome-desktop", VERSION, &argc, argv,
|
||||
GNORBA_INIT_SERVER_FUNC, &ev);
|
||||
gnome_vfs_init();
|
||||
gdk_rgb_init();
|
||||
|
||||
window = desktop_window_new();
|
||||
|
||||
gtk_widget_push_visual(gdk_rgb_get_visual());
|
||||
gtk_widget_push_colormap(gdk_rgb_get_cmap());
|
||||
canvas = desktop_canvas_new();
|
||||
gtk_widget_pop_visual();
|
||||
gtk_widget_pop_colormap();
|
||||
|
||||
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");
|
||||
"file:/home/");
|
||||
|
||||
gtk_signal_connect(GTK_OBJECT(window), "delete_event",
|
||||
GTK_SIGNAL_FUNC(delete_event_cb), NULL);
|
||||
|
|
Loading…
Reference in a new issue