summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEttore Perazzoli <ettore@src.gnome.org>1999-10-12 01:23:44 +0000
committerEttore Perazzoli <ettore@src.gnome.org>1999-10-12 01:23:44 +0000
commitb43b09c86486c9c417507e71e8e1323a57c50fa3 (patch)
treec2b55c4ee2e994753aab3acab83316382009360f
parentcee6d77c88ce38352b955e49b4d16f4b64d57f56 (diff)
downloadnautilus-b43b09c86486c9c417507e71e8e1323a57c50fa3.tar.gz
Update the selection information at idle time for the directory view at
idle time.
-rw-r--r--src/file-manager/fm-directory-view.c114
-rw-r--r--src/file-manager/fm-directory-view.h4
2 files changed, 81 insertions, 37 deletions
diff --git a/src/file-manager/fm-directory-view.c b/src/file-manager/fm-directory-view.c
index 56b5ea511..ab7ad92ea 100644
--- a/src/file-manager/fm-directory-view.c
+++ b/src/file-manager/fm-directory-view.c
@@ -133,18 +133,53 @@ view_has_icon_container (ExplorerDirectoryView *view)
return mode_uses_icon_container (view->mode);
}
-static void
-icon_container_selection_changed_cb (GnomeIconContainer *container,
- gpointer data)
+static GnomeIconContainer *
+get_icon_container (ExplorerDirectoryView *view)
+{
+ GtkBin *bin;
+
+ g_return_val_if_fail (view_has_icon_container (view), NULL);
+
+ bin = GTK_BIN (view);
+
+ if (bin->child == NULL)
+ return NULL; /* Avoid GTK+ complaints. */
+ else
+ return GNOME_ICON_CONTAINER (bin->child);
+}
+
+static gint
+display_icon_container_selection_info_idle_cb (gpointer data)
{
ExplorerDirectoryView *view;
+ GnomeIconContainer *icon_container;
GList *selection;
+ puts (__FUNCTION__);
+
view = EXPLORER_DIRECTORY_VIEW (data);
+ icon_container = get_icon_container (view);
- selection = gnome_icon_container_get_selection (container);
+ selection = gnome_icon_container_get_selection (icon_container);
display_selection_info (view, selection);
g_list_free (selection);
+
+ view->display_selection_idle_id = 0;
+
+ return FALSE;
+}
+
+static void
+icon_container_selection_changed_cb (GnomeIconContainer *container,
+ gpointer data)
+{
+ ExplorerDirectoryView *view;
+
+ view = EXPLORER_DIRECTORY_VIEW (data);
+ if (view->display_selection_idle_id == 0)
+ view->display_selection_idle_id = gtk_idle_add
+ (display_icon_container_selection_info_idle_cb,
+ view);
}
static void
@@ -166,21 +201,6 @@ icon_container_activate_cb (GnomeIconContainer *icon_container,
gnome_vfs_uri_unref (new_uri);
}
-static GnomeIconContainer *
-get_icon_container (ExplorerDirectoryView *view)
-{
- GtkBin *bin;
-
- g_return_val_if_fail (view_has_icon_container (view), NULL);
-
- bin = GTK_BIN (view);
-
- if (bin->child == NULL)
- return NULL; /* Avoid GTK+ complaints. */
- else
- return GNOME_ICON_CONTAINER (bin->child);
-}
-
static void
add_to_icon_container (ExplorerDirectoryView *view,
ExplorerIconManager *icon_manager,
@@ -307,18 +327,51 @@ view_has_flist (ExplorerDirectoryView *view)
return mode_uses_flist (view->mode);
}
-static void
-flist_selection_changed_cb (GtkFList *flist,
- gpointer data)
+static GtkFList *
+get_flist (ExplorerDirectoryView *view)
+{
+ GtkBin *bin;
+
+ g_return_val_if_fail (view_has_flist (view), NULL);
+
+ bin = GTK_BIN (view);
+
+ if (bin->child == NULL)
+ return NULL; /* Avoid GTK+ complaints. */
+ else
+ return GTK_FLIST (bin->child);
+}
+
+static gint
+display_flist_selection_info_idle_cb (gpointer data)
{
ExplorerDirectoryView *view;
+ GtkFList *flist;
GList *selection;
view = EXPLORER_DIRECTORY_VIEW (data);
+ flist = get_flist (view);
selection = gtk_flist_get_selection (flist);
display_selection_info (view, selection);
g_list_free (selection);
+
+ view->display_selection_idle_id = 0;
+
+ return FALSE;
+}
+
+static void
+flist_selection_changed_cb (GtkFList *flist,
+ gpointer data)
+{
+ ExplorerDirectoryView *view;
+
+ view = EXPLORER_DIRECTORY_VIEW (data);
+ if (view->display_selection_idle_id == 0)
+ view->display_selection_idle_id
+ = gtk_idle_add (display_flist_selection_info_idle_cb,
+ view);
}
static void
@@ -339,21 +392,6 @@ flist_activate_cb (GtkFList *flist,
gnome_vfs_uri_unref (new_uri);
}
-static GtkFList *
-get_flist (ExplorerDirectoryView *view)
-{
- GtkBin *bin;
-
- g_return_val_if_fail (view_has_flist (view), NULL);
-
- bin = GTK_BIN (view);
-
- if (bin->child == NULL)
- return NULL; /* Avoid GTK+ complaints. */
- else
- return GTK_FLIST (bin->child);
-}
-
static void
add_to_flist (ExplorerIconManager *icon_manager,
GtkFList *flist,
@@ -607,6 +645,8 @@ init (ExplorerDirectoryView *directory_view)
directory_view->icon_layout = NULL;
directory_view->icons_not_in_layout = NULL;
+ directory_view->display_selection_idle_id = 0;
+
scroll_frame = GTK_SCROLL_FRAME (directory_view);
gtk_scroll_frame_set_hadjustment (scroll_frame, NULL);
diff --git a/src/file-manager/fm-directory-view.h b/src/file-manager/fm-directory-view.h
index 6c5f0f8d4..dff73428b 100644
--- a/src/file-manager/fm-directory-view.h
+++ b/src/file-manager/fm-directory-view.h
@@ -77,6 +77,10 @@ struct _ExplorerDirectoryView {
const GnomeIconContainerLayout *icon_layout;
GList *icons_not_in_layout;
+
+ /* Idle ID for displaying information about the current selection at
+ idle time. */
+ gint display_selection_idle_id;
};
struct _ExplorerDirectoryViewClass {