[monkey-bubble: 338/753] Implemented the new CORBA API.
- From: Sven Herzberg <herzi src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [monkey-bubble: 338/753] Implemented the new CORBA API.
- Date: Wed, 14 Jul 2010 22:24:04 +0000 (UTC)
commit 7f3a1b6d0d5abb799dc6e8841aa60b06c57b96c4
Author: Martin Baulig <baulig suse de>
Date: Thu May 31 16:39:59 2001 +0000
Implemented the new CORBA API.
2001-05-31 Martin Baulig <baulig suse de>
* gnome-selector.c: Implemented the new CORBA API.
* gnome-selector.h (GnomeSelectorClass): Renamed "clear" to "clear_uri_list",
added "scan_directory" and added `gboolean directory_ok' to "check_uri".
(gnome_selector_scan_uri, gnome_selector_set_directory_filter): New functions.
* gnome-async-context.c
(GnomeAsyncFunc): Added `gboolean completed' and `const BonoboArg *result'.
(gnome_async_context_get_handle_by_id): New function.
(gnome_async_handle_set_result): New function.
(gnome_async_handle_call_async_func): New function.
(gnome_async_handle_get_id): New function.
* gnome-file-selector.[ch]: Derive from GnomeDirectoryFilter.
* gnome-selector-dialog.[ch]: Removed.
libgnome/ChangeLog | 19 ++
libgnome/Makefile.am | 2 -
libgnome/gnome-directory-filter.c | 111 ++++++--
libgnome/gnome-directory-filter.h | 1 +
libgnome/gnome-file-selector.c | 530 ++++++-------------------------------
libgnome/gnome-file-selector.h | 6 +-
libgnome/gnome-marshal.list | 1 +
libgnome/gnome-selector-dialog.c | 82 ------
libgnome/gnome-selector-dialog.h | 66 -----
9 files changed, 188 insertions(+), 630 deletions(-)
---
diff --git a/libgnome/ChangeLog b/libgnome/ChangeLog
index f07c1e5..beb4022 100644
--- a/libgnome/ChangeLog
+++ b/libgnome/ChangeLog
@@ -1,3 +1,22 @@
+2001-05-31 Martin Baulig <baulig suse de>
+
+ * gnome-selector.c: Implemented the new CORBA API.
+
+ * gnome-selector.h (GnomeSelectorClass): Renamed "clear" to "clear_uri_list",
+ added "scan_directory" and added `gboolean directory_ok' to "check_uri".
+ (gnome_selector_scan_uri, gnome_selector_set_directory_filter): New functions.
+
+ * gnome-async-context.c
+ (GnomeAsyncFunc): Added `gboolean completed' and `const BonoboArg *result'.
+ (gnome_async_context_get_handle_by_id): New function.
+ (gnome_async_handle_set_result): New function.
+ (gnome_async_handle_call_async_func): New function.
+ (gnome_async_handle_get_id): New function.
+
+ * gnome-file-selector.[ch]: Derive from GnomeDirectoryFilter.
+
+ * gnome-selector-dialog.[ch]: Removed.
+
2001-05-25 Martin Baulig <baulig suse de>
* gnome-selector.[ch]: Merged `check_filename' and `check_directory'
diff --git a/libgnome/Makefile.am b/libgnome/Makefile.am
index 93738e1..767d82a 100644
--- a/libgnome/Makefile.am
+++ b/libgnome/Makefile.am
@@ -60,7 +60,6 @@ libgnome_src = \
gnome-selector.c \
gnome-file-selector.c \
gnome-selector-factory.c\
- gnome-selector-dialog.c \
gnome-directory-filter.c\
gnome-config.c \
gnome-ditem.c \
@@ -106,7 +105,6 @@ libgnome_headers = \
gnome-selectorP.h \
gnome-file-selector.h \
gnome-selector-factory.h\
- gnome-selector-dialog.h \
gnome-directory-filter.h\
libgnome-init.h \
libgnome.h
diff --git a/libgnome/gnome-directory-filter.c b/libgnome/gnome-directory-filter.c
index d2c2b77..bbc457a 100644
--- a/libgnome/gnome-directory-filter.c
+++ b/libgnome/gnome-directory-filter.c
@@ -67,41 +67,104 @@ impl_GNOME_DirectoryFilter_getEventSource (PortableServer_Servant servant,
static void
check_uri_async_cb (GnomeAsyncContext *async_ctx, GnomeAsyncHandle *async_handle,
- GnomeAsyncType async_type, GObject *object,
- const gchar *uri, const gchar *error, gboolean success, gpointer user_data)
+ GnomeAsyncType async_type, GObject *object, const gchar *uri,
+ gboolean completed, gboolean success, const gchar *error,
+ const BonoboArg *result, gpointer user_data)
{
+ GnomeDirectoryFilter *filter = GNOME_DIRECTORY_FILTER (object);
+ GNOME_DirectoryFilter_Event *event;
+ CORBA_any *any;
+
g_message (G_STRLOC);
+
+ event = GNOME_DirectoryFilter_Event__alloc ();
+ event->uri = CORBA_string_dup (uri);
+ event->success = success;
+ CORBA_any__copy (&event->result, result);
+ CORBA_any__copy (&event->user_data, (CORBA_any *) user_data);
+
+ any = CORBA_any__alloc ();
+ any->_type = TC_GNOME_DirectoryFilter_Event;
+ any->_value = event;
+ any->_release = TRUE;
+
+ bonobo_event_source_notify_listeners_full (filter->_priv->event_source,
+ "GNOME/DirectoryFilter",
+ "async", "check_uri",
+ any, NULL);
+
+ CORBA_free (any);
}
static void
impl_GNOME_DirectoryFilter_checkURI (PortableServer_Servant servant,
- const CORBA_char * uri, CORBA_Environment * ev)
+ const CORBA_char * uri, const CORBA_boolean directory_ok,
+ const CORBA_any * user_data, CORBA_Environment * ev)
{
GnomeDirectoryFilter *filter = GNOME_DIRECTORY_FILTER (bonobo_object_from_servant (servant));
GnomeAsyncHandle *async_handle;
+ CORBA_any *any;
+
+ any = CORBA_any__alloc ();
+ CORBA_any__copy (any, user_data);
async_handle = gnome_async_context_get (filter->_priv->async_ctx, 0, check_uri_async_cb,
- G_OBJECT (filter), NULL, NULL, NULL);
+ G_OBJECT (filter), NULL, any, (GDestroyNotify) CORBA_free);
- g_signal_emit (G_OBJECT (filter),
- gnome_directory_filter_signals [CHECK_URI_SIGNAL], 0,
- uri, async_handle);
+ g_signal_emit (G_OBJECT (filter), gnome_directory_filter_signals [CHECK_URI_SIGNAL], 0,
+ uri, directory_ok, async_handle);
}
static void
-impl_GNOME_DirectoryFilter_scanDirectory (PortableServer_Servant servant,
- const CORBA_char * directory,
- CORBA_Environment * ev)
+scan_directory_async_cb (GnomeAsyncContext *async_ctx, GnomeAsyncHandle *async_handle,
+ GnomeAsyncType async_type, GObject *object, const gchar *uri,
+ gboolean completed, gboolean success, const gchar *error,
+ const BonoboArg *result, gpointer user_data)
{
+ GnomeDirectoryFilter *filter = GNOME_DIRECTORY_FILTER (object);
+ GNOME_DirectoryFilter_Event *event;
+ CORBA_any *arg;
+
+ g_message (G_STRLOC ": %d - %d - `%s'", completed, success, uri);
+
+ event = GNOME_DirectoryFilter_Event__alloc ();
+ event->uri = CORBA_string_dup (uri);
+ event->completed = completed;
+ event->success = success;
+ CORBA_any__copy (&event->result, result);
+ CORBA_any__copy (&event->user_data, (CORBA_any *) user_data);
+
+ arg = CORBA_any__alloc ();
+ arg->_type = TC_GNOME_DirectoryFilter_Event;
+ arg->_value = event;
+ arg->_release = TRUE;
+
+ bonobo_event_source_notify_listeners_full (filter->_priv->event_source,
+ "GNOME/DirectoryFilter",
+ "async", "scan_directory",
+ arg, NULL);
+
+ CORBA_free (arg);
}
static void
-gnome_directory_filter_check_uri (GnomeDirectoryFilter *filter, const gchar *uri,
- GnomeAsyncHandle *async_handle)
+impl_GNOME_DirectoryFilter_scanDirectory (PortableServer_Servant servant,
+ const CORBA_char * directory,
+ const CORBA_any * user_data,
+ CORBA_Environment * ev)
{
- g_message (G_STRLOC ": `%s'", uri);
+ GnomeDirectoryFilter *filter = GNOME_DIRECTORY_FILTER (bonobo_object_from_servant (servant));
+ GnomeAsyncHandle *async_handle;
+ CORBA_any *any;
- gnome_async_handle_completed (async_handle, FALSE);
+ any = CORBA_any__alloc ();
+ CORBA_any__copy (any, user_data);
+
+ async_handle = gnome_async_context_get (filter->_priv->async_ctx, 0, scan_directory_async_cb,
+ G_OBJECT (filter), NULL, any, (GDestroyNotify) CORBA_free);
+
+ g_signal_emit (G_OBJECT (filter), gnome_directory_filter_signals [SCAN_DIRECTORY_SIGNAL], 0,
+ directory, async_handle);
}
static void
@@ -116,22 +179,22 @@ gnome_directory_filter_class_init (GnomeDirectoryFilterClass *klass)
gnome_directory_filter_signals [CHECK_URI_SIGNAL] =
g_signal_newc ("check_uri",
- G_TYPE_FROM_CLASS (object_class),
+ G_TYPE_FROM_CLASS (klass),
G_SIGNAL_RUN_LAST,
G_STRUCT_OFFSET (GnomeDirectoryFilterClass,
check_uri),
NULL, NULL,
- gnome_marshal_VOID__STRING_BOXED,
- G_TYPE_NONE, 2,
- G_TYPE_STRING,
+ gnome_marshal_VOID__STRING_BOOLEAN_BOXED,
+ G_TYPE_NONE, 3,
+ G_TYPE_STRING, G_TYPE_BOOLEAN,
GNOME_TYPE_ASYNC_HANDLE);
gnome_directory_filter_signals [SCAN_DIRECTORY_SIGNAL] =
g_signal_newc ("scan_directory",
- G_TYPE_FROM_CLASS (object_class),
+ G_TYPE_FROM_CLASS (klass),
G_SIGNAL_RUN_LAST,
G_STRUCT_OFFSET (GnomeDirectoryFilterClass,
- check_uri),
+ scan_directory),
NULL, NULL,
gnome_marshal_VOID__STRING_BOXED,
G_TYPE_NONE, 2,
@@ -142,8 +205,6 @@ gnome_directory_filter_class_init (GnomeDirectoryFilterClass *klass)
epv->checkURI = impl_GNOME_DirectoryFilter_checkURI;
epv->scanDirectory = impl_GNOME_DirectoryFilter_scanDirectory;
- klass->check_uri = gnome_directory_filter_check_uri;
-
object_class->finalize = gnome_directory_filter_finalize;
}
@@ -151,6 +212,9 @@ static void
gnome_directory_filter_init (GnomeDirectoryFilter *filter)
{
filter->_priv = g_new0 (GnomeDirectoryFilterPrivate, 1);
+
+ filter->_priv->event_source = bonobo_event_source_new ();
+ filter->_priv->async_ctx = gnome_async_context_new ();
}
static void
@@ -177,9 +241,6 @@ gnome_directory_filter_new (void)
filter = g_object_new (gnome_directory_filter_get_type (), NULL);
- filter->_priv->event_source = bonobo_event_source_new ();
- filter->_priv->async_ctx = gnome_async_context_new ();
-
return filter;
}
diff --git a/libgnome/gnome-directory-filter.h b/libgnome/gnome-directory-filter.h
index 3f47f46..ba6c451 100644
--- a/libgnome/gnome-directory-filter.h
+++ b/libgnome/gnome-directory-filter.h
@@ -60,6 +60,7 @@ struct _GnomeDirectoryFilterClass {
void (*check_uri) (GnomeDirectoryFilter *filter,
const gchar *uri,
+ gboolean directory_ok,
GnomeAsyncHandle *async_handle);
void (*scan_directory) (GnomeDirectoryFilter *filter,
diff --git a/libgnome/gnome-file-selector.c b/libgnome/gnome-file-selector.c
index 11e3181..0a232a4 100644
--- a/libgnome/gnome-file-selector.c
+++ b/libgnome/gnome-file-selector.c
@@ -33,6 +33,8 @@
#include <stdio.h>
#include <string.h>
+#include <gobject/gboxed.h>
+#include <gobject/gvaluearray.h>
#include <gobject/gvaluetypes.h>
#include <libgnome/gnome-i18n.h>
#include <libgnome/gnome-file-selector.h>
@@ -40,10 +42,10 @@
#include <libgnomevfs/gnome-vfs.h>
-#undef DEBUG_ASYNC_STUFF
+#define DEBUG_ASYNC_STUFF
-#define PARENT_TYPE gnome_selector_get_type()
-GnomeSelectorClass *gnome_file_selector_parent_class = NULL;
+#define PARENT_TYPE gnome_directory_filter_get_type()
+GnomeDirectoryFilterClass *gnome_file_selector_parent_class = NULL;
typedef struct _GnomeFileAsyncData GnomeFileAsyncData;
typedef struct _GnomeFileSelectorSubAsyncData GnomeFileSelectorSubAsyncData;
@@ -54,8 +56,11 @@ struct _GnomeFileAsyncData {
GnomeAsyncType type;
GnomeFileSelector *fselector;
+ gboolean directory_ok;
+
GSList *async_ops;
gboolean completed;
+ gboolean success;
GnomeVFSAsyncHandle *vfs_handle;
GnomeVFSURI *uri;
@@ -80,51 +85,31 @@ static void gnome_file_selector_class_init (GnomeFileSelectorClass *class);
static void gnome_file_selector_init (GnomeFileSelector *fselector);
static void gnome_file_selector_finalize (GObject *object);
-static void add_uri_handler (GnomeSelector *selector,
+static void check_uri_handler (GnomeDirectoryFilter *filter,
const gchar *uri,
- gint position,
- guint list_id,
- GnomeAsyncHandle *async_handle);
-
-static void add_directory_handler (GnomeSelector *selector,
- const gchar *uri,
- gint position,
- guint list_id,
+ gboolean directory_ok,
GnomeAsyncHandle *async_handle);
-static void add_uri_list_handler (GnomeSelector *selector,
- GSList *list,
- gint position,
- guint list_id,
- GnomeAsyncHandle *async_handle);
-
-static void check_uri_handler (GnomeSelector *selector,
- const gchar *filename,
- GnomeAsyncHandle *async_handle);
-
-static void activate_entry_handler (GnomeSelector *selector);
+static void scan_directory_handler (GnomeDirectoryFilter *filter,
+ const gchar *uri,
+ GnomeAsyncHandle *async_handle);
static void
gnome_file_selector_class_init (GnomeFileSelectorClass *class)
{
- GnomeSelectorClass *selector_class;
GObjectClass *object_class;
+ GnomeDirectoryFilterClass *filter_class;
gnome_file_selector_parent_class = g_type_class_peek_parent (class);
- selector_class = (GnomeSelectorClass *) class;
object_class = (GObjectClass *) class;
+ filter_class = (GnomeDirectoryFilterClass *) class;
object_class->finalize = gnome_file_selector_finalize;
- selector_class->add_uri = add_uri_handler;
-
- selector_class->add_uri_list = add_uri_list_handler;
-
- selector_class->activate_entry = activate_entry_handler;
-
- selector_class->check_uri = check_uri_handler;
+ filter_class->check_uri = check_uri_handler;
+ filter_class->scan_directory = scan_directory_handler;
}
static void
@@ -147,336 +132,9 @@ free_the_async_data (gpointer data)
}
static void
-add_uri_async_done_cb (GnomeFileAsyncData *async_data)
-{
- GnomeAsyncHandle *async_handle;
- gchar *path;
-
- g_return_if_fail (async_data != NULL);
-
- /* When we finish our async reading, we set async_data->completed -
- * but we need to wait until all our async operations are completed as
- * well.
- */
-
-#ifdef DEBUG_ASYNC_STUFF
- g_message (G_STRLOC ": %p - %d - %p", async_data, async_data->completed,
- async_data->async_ops);
-#endif
-
- if (!async_data->completed || async_data->async_ops != NULL)
- return;
-
- async_handle = async_data->async_handle;
-
- path = gnome_vfs_uri_to_string (async_data->uri,
- GNOME_VFS_URI_HIDE_NONE);
- if (gnome_file_selector_parent_class->add_uri)
- gnome_file_selector_parent_class->add_uri
- (GNOME_SELECTOR (async_data->fselector), path,
- async_data->position, async_data->list_id,
- async_handle);
-
-#ifdef DEBUG_ASYNC_STUFF
- g_message (G_STRLOC ": %p - async reading completed (%s).",
- async_data->fselector, path);
-#endif
-
- g_free (path);
-
- gnome_async_handle_remove (async_handle, async_data);
-}
-
-static void
-add_uri_async_add_cb (GnomeAsyncContext *context,
- GnomeAsyncHandle *async_handle,
- GnomeAsyncType async_type,
- GObject *object,
- const gchar *uri, const gchar *error,
- gboolean success, gpointer user_data)
-{
- GnomeFileSelectorSubAsyncData *sub_async_data = user_data;
- GnomeFileAsyncData *async_data;
-
- g_return_if_fail (sub_async_data != NULL);
- g_assert (sub_async_data->async_data != NULL);
- async_data = sub_async_data->async_data;
-
- /* This operation is completed, remove it from the list and call
- * add_uri_async_done_cb() - this function will check whether
- * this was the last one and the uri checking is done as well.
- */
-
- async_data->async_ops = g_slist_remove (async_data->async_ops,
- sub_async_data);
-
-#ifdef DEBUG_ASYNC_STUFF
- g_message (G_STRLOC ": %p - %p - `%s'", async_data->async_ops,
- sub_async_data, uri);
-#endif
-
- add_uri_async_done_cb (async_data);
-}
-
-
-static void
-add_uri_async_cb (GnomeVFSAsyncHandle *handle, GList *results,
- gpointer callback_data)
-{
- GnomeFileAsyncData *async_data;
- GnomeFileSelector *fselector;
- GList *list;
-
- g_return_if_fail (callback_data != NULL);
-
- async_data = callback_data;
- g_assert (async_data->vfs_handle == handle);
- g_assert (GNOME_IS_FILE_SELECTOR (async_data->fselector));
- g_assert (async_data->type == GNOME_ASYNC_TYPE_ADD_URI);
-
- fselector = GNOME_FILE_SELECTOR (async_data->fselector);
-
- for (list = results; list; list = list->next) {
- GnomeVFSGetFileInfoResult *file = list->data;
- gchar *uri;
-
- /* better assert this than risking a crash. */
- g_assert (file != NULL);
-
- uri = gnome_vfs_uri_to_string (file->uri, GNOME_VFS_URI_HIDE_NONE);
-
- if (file->result != GNOME_VFS_OK) {
- g_message (G_STRLOC ": `%s': %s", uri,
- gnome_vfs_result_to_string (file->result));
- g_free (uri);
- continue;
- }
-
- if (file->file_info->type == GNOME_VFS_FILE_TYPE_DIRECTORY) {
- GnomeFileSelectorSubAsyncData *sub_async_data;
- GnomeAsyncContext *async_ctx;
-
- sub_async_data = g_new0 (GnomeFileSelectorSubAsyncData, 1);
- sub_async_data->async_data = async_data;
-
- async_data->async_ops = g_slist_prepend
- (async_data->async_ops, sub_async_data);
-
- async_ctx = gnome_selector_get_async_context (GNOME_SELECTOR (fselector));
- sub_async_data->async_handle = gnome_async_context_get (async_ctx,
- GNOME_ASYNC_TYPE_ADD_URI,
- add_uri_async_add_cb,
- G_OBJECT (fselector), uri,
- sub_async_data, NULL);
-
- add_directory_handler (GNOME_SELECTOR (fselector), uri, async_data->position,
- async_data->list_id, sub_async_data->async_handle);
-
- g_free (uri);
- continue;
- }
-
- if (fselector->_priv->filter &&
- !gnome_vfs_directory_filter_apply (fselector->_priv->filter,
- file->file_info)) {
-
- g_message (G_STRLOC ": dropped by directory filter");
-
- g_free (uri);
- continue;
- }
-
- if (file->file_info->type == GNOME_VFS_FILE_TYPE_REGULAR) {
- GnomeFileSelectorSubAsyncData *sub_async_data;
-
- sub_async_data = g_new0 (GnomeFileSelectorSubAsyncData, 1);
- sub_async_data->async_data = async_data;
-
- async_data->async_ops = g_slist_prepend
- (async_data->async_ops, sub_async_data);
-
- gnome_selector_add_uri (GNOME_SELECTOR (fselector),
- &sub_async_data->async_handle, uri,
- async_data->position, GNOME_SELECTOR_ACTIVE_LIST,
- add_uri_async_add_cb, sub_async_data);
-
- g_free (uri);
- continue;
- }
-
- g_free (uri);
- }
-
- /* Completed, but we may have async operations running. We set
- * async_data->completed here to inform add_uri_async_done_cb()
- * that we're done with our async operation.
- */
- async_data->completed = TRUE;
- add_uri_async_done_cb (async_data);
-}
-
-void
-add_uri_handler (GnomeSelector *selector, const gchar *uri, gint position,
- guint list_id, GnomeAsyncHandle *async_handle)
-{
- GnomeFileSelector *fselector;
- GnomeFileAsyncData *async_data;
- GnomeVFSURI *vfs_uri;
- GList fake_list;
-
- g_message (G_STRLOC ": `%s' - %d - %d", uri, position, list_id);
-
- g_return_if_fail (selector != NULL);
- g_return_if_fail (GNOME_IS_FILE_SELECTOR (selector));
- g_return_if_fail (position >= -1);
- g_return_if_fail (uri != NULL);
- g_return_if_fail (async_handle != NULL);
-
- fselector = GNOME_FILE_SELECTOR (selector);
-
- if (list_id != GNOME_SELECTOR_URI_LIST) {
- if (gnome_file_selector_parent_class->add_uri)
- gnome_file_selector_parent_class->add_uri (selector, uri, position,
- list_id, async_handle);
-
- gnome_async_handle_completed (async_handle, TRUE);
- return;
- }
-
- vfs_uri = gnome_vfs_uri_new (uri);
- if (!vfs_uri) {
- gnome_async_handle_completed (async_handle, FALSE);
- return;
- }
-
- async_data = g_new0 (GnomeFileAsyncData, 1);
- async_data->async_handle = async_handle;
- async_data->type = GNOME_ASYNC_TYPE_ADD_URI;
- async_data->fselector = fselector;
- async_data->uri = vfs_uri;
- async_data->position = position;
- async_data->list_id = list_id;
-
- gnome_vfs_uri_ref (async_data->uri);
- g_object_ref (G_OBJECT (async_data->fselector));
-
- fake_list.data = async_data->uri;
- fake_list.prev = NULL;
- fake_list.next = NULL;
-
- gnome_async_handle_add (async_handle, async_data, free_the_async_data);
-
- gnome_vfs_async_get_file_info (&async_data->vfs_handle, &fake_list,
- fselector->_priv->file_info_options,
- add_uri_async_cb, async_data);
-
- gnome_vfs_uri_unref (fake_list.data);
-}
-
-static void
-add_uri_list_async_done_cb (GnomeFileAsyncData *async_data)
-{
- GnomeAsyncHandle *async_handle;
-
- g_return_if_fail (async_data != NULL);
-
- /* When we finish our directory reading, we set async_data->completed -
- * but we need to wait until all our async operations are completed as
- * well.
- */
-
- if (!async_data->completed || async_data->async_ops != NULL)
- return;
-
- async_handle = async_data->async_handle;
-
- if (gnome_file_selector_parent_class->add_uri_list)
- gnome_file_selector_parent_class->add_uri_list
- (GNOME_SELECTOR (async_data->fselector),
- async_data->uri_list, async_data->position,
- async_data->list_id, async_handle);
-
- gnome_async_handle_remove (async_handle, async_data);
-}
-
-static void
-add_uri_list_async_cb (GnomeAsyncContext *context,
- GnomeAsyncHandle *async_handle,
- GnomeAsyncType async_type,
- GObject *object,
- const gchar *uri, const gchar *error,
- gboolean success, gpointer user_data)
-{
- GnomeFileSelectorSubAsyncData *sub_async_data = user_data;
- GnomeFileAsyncData *async_data;
-
- g_return_if_fail (sub_async_data != NULL);
- g_assert (sub_async_data->async_data != NULL);
- async_data = sub_async_data->async_data;
-
- /* This operation is completed, remove it from the list and call
- * add_uri_list_async_done_cb() - this function will check whether
- * this was the last one and the directory reading is done as well.
- */
-
- async_data->async_ops = g_slist_remove (async_data->async_ops,
- sub_async_data);
-
- add_uri_list_async_done_cb (async_data);
-}
-
-static void
-add_uri_list_handler (GnomeSelector *selector, GSList *list,
- gint position, guint list_id,
- GnomeAsyncHandle *async_handle)
-{
- GnomeFileAsyncData *async_data;
- GnomeFileSelector *fselector;
- GSList *c;
-
- g_return_if_fail (selector != NULL);
- g_return_if_fail (GNOME_IS_FILE_SELECTOR (selector));
- g_return_if_fail (async_handle != NULL);
-
- fselector = GNOME_FILE_SELECTOR (selector);
-
- async_data = g_new0 (GnomeFileAsyncData, 1);
- async_data->async_handle = async_handle;
- async_data->type = GNOME_ASYNC_TYPE_ADD_URI_LIST;
- async_data->fselector = fselector;
- async_data->position = position;
- async_data->uri_list = _gnome_selector_deep_copy_slist (list);
- async_data->list_id = list_id;
-
- g_object_ref (G_OBJECT (async_data->fselector));
-
- gnome_async_handle_add (async_handle, async_data, free_the_async_data);
-
- for (c = list; c; c = c->next) {
- GnomeFileSelectorSubAsyncData *sub_async_data;
-
- sub_async_data = g_new0 (GnomeFileSelectorSubAsyncData, 1);
- sub_async_data->async_data = async_data;
-
- async_data->async_ops = g_slist_prepend
- (async_data->async_ops, sub_async_data);
-
- gnome_selector_add_uri (GNOME_SELECTOR (fselector),
- &sub_async_data->async_handle,
- c->data, position, list_id,
- add_uri_list_async_cb,
- sub_async_data);
- }
-
- async_data->completed = TRUE;
- add_uri_list_async_done_cb (async_data);
-}
-
-static void
add_directory_async_done_cb (GnomeFileAsyncData *async_data)
{
GnomeAsyncHandle *async_handle;
- gchar *path;
g_return_if_fail (async_data != NULL);
@@ -490,46 +148,11 @@ add_directory_async_done_cb (GnomeFileAsyncData *async_data)
async_handle = async_data->async_handle;
- path = gnome_vfs_uri_to_string (async_data->uri,
- GNOME_VFS_URI_HIDE_NONE);
- if (gnome_file_selector_parent_class->add_uri)
- gnome_file_selector_parent_class->add_uri
- (GNOME_SELECTOR (async_data->fselector), path,
- async_data->position, async_data->list_id,
- async_handle);
-
- g_free (path);
-
+ gnome_async_handle_completed (async_handle, async_data->success);
gnome_async_handle_remove (async_handle, async_data);
}
static void
-add_directory_async_file_cb (GnomeAsyncContext *context,
- GnomeAsyncHandle *async_handle,
- GnomeAsyncType async_type,
- GObject *object,
- const gchar *uri, const gchar *error,
- gboolean success, gpointer user_data)
-{
- GnomeFileSelectorSubAsyncData *sub_async_data = user_data;
- GnomeFileAsyncData *async_data;
-
- g_return_if_fail (sub_async_data != NULL);
- g_assert (sub_async_data->async_data != NULL);
- async_data = sub_async_data->async_data;
-
- /* This operation is completed, remove it from the list and call
- * add_directory_async_done_cb() - this function will check whether
- * this was the last one and the directory reading is done as well.
- */
-
- async_data->async_ops = g_slist_remove (async_data->async_ops,
- sub_async_data);
-
- add_directory_async_done_cb (async_data);
-}
-
-static void
add_directory_async_cb (GnomeVFSAsyncHandle *handle, GnomeVFSResult result,
GList *list, guint entries_read, gpointer callback_data)
{
@@ -545,12 +168,20 @@ add_directory_async_cb (GnomeVFSAsyncHandle *handle, GnomeVFSResult result,
fselector = GNOME_FILE_SELECTOR (async_data->fselector);
+ g_message (G_STRLOC ": %d (%s) - %p - %d", result,
+ gnome_vfs_result_to_string (result), list, entries_read);
+
if (list != NULL) {
+ BonoboArg *arg;
+ GNOME_stringlist *stringlist;
GList *c;
+ stringlist = GNOME_stringlist__alloc ();
+ stringlist->_maximum = g_list_length (list);
+ stringlist->_buffer = CORBA_sequence_CORBA_string_allocbuf (stringlist->_maximum);
+
for (c = list; c; c = c->next) {
GnomeVFSFileInfo *info = c->data;
- GnomeFileSelectorSubAsyncData *sub_async_data;
GnomeVFSURI *uri;
gchar *text;
@@ -563,58 +194,69 @@ add_directory_async_cb (GnomeVFSAsyncHandle *handle, GnomeVFSResult result,
uri = gnome_vfs_uri_append_file_name (async_data->uri, info->name);
text = gnome_vfs_uri_to_string (uri, GNOME_VFS_URI_HIDE_NONE);
- /* We keep a list of currently running async operations in
- * async_data->async_ops. This is that add_directory_async_done_cb()
- * knows whether we're really done or whether we still need to wait.
- */
-
- sub_async_data = g_new0 (GnomeFileSelectorSubAsyncData, 1);
- sub_async_data->async_data = async_data;
-
- async_data->async_ops = g_slist_prepend
- (async_data->async_ops, sub_async_data);
-
- gnome_selector_add_uri (GNOME_SELECTOR (fselector),
- &sub_async_data->async_handle,
- text, async_data->position,
- GNOME_SELECTOR_ACTIVE_LIST,
- add_directory_async_file_cb,
- sub_async_data);
+ stringlist->_buffer [stringlist->_length++] = CORBA_string_dup (text);
gnome_vfs_uri_unref (uri);
g_free (text);
}
+
+ arg = CORBA_any__alloc ();
+ arg->_type = TC_GNOME_stringlist;
+ arg->_release = TRUE;
+ arg->_value = stringlist;
+
+ gnome_async_handle_call_async_func (async_data->async_handle, arg);
+
+ CORBA_free (arg);
}
- if (result == GNOME_VFS_ERROR_EOF) {
+ if (result == GNOME_VFS_ERROR_NOT_A_DIRECTORY) {
+ BonoboArg *arg;
+ gchar *text;
+
+ text = gnome_vfs_uri_to_string (async_data->uri, GNOME_VFS_URI_HIDE_NONE);
+
+ arg = bonobo_arg_new (TC_string);
+ BONOBO_ARG_SET_STRING (arg, text);
+
+ gnome_async_handle_set_result (async_data->async_handle, arg);
+
+ bonobo_arg_release (arg);
+ g_free (text);
+ }
+
+ if (result != GNOME_VFS_OK) {
/* Completed, but we may have async operations running. We set
* async_data->completed here to inform add_directory_async_done_cb()
* that we're done with our directory reading.
*/
+ if ((result == GNOME_VFS_ERROR_EOF) || (result == GNOME_VFS_ERROR_NOT_A_DIRECTORY))
+ async_data->success = TRUE;
+ else
+ async_data->success = FALSE;
async_data->completed = TRUE;
add_directory_async_done_cb (async_data);
+ return;
}
}
static void
-add_directory_handler (GnomeSelector *selector, const gchar *uri,
- gint position, guint list_id, GnomeAsyncHandle *async_handle)
+scan_directory_handler (GnomeDirectoryFilter *filter, const gchar *uri, GnomeAsyncHandle *async_handle)
{
GnomeFileSelector *fselector;
GnomeFileAsyncData *async_data;
GnomeVFSURI *vfs_uri;
- g_return_if_fail (selector != NULL);
- g_return_if_fail (GNOME_IS_FILE_SELECTOR (selector));
- g_return_if_fail (position >= -1);
+ g_return_if_fail (filter != NULL);
+ g_return_if_fail (GNOME_IS_FILE_SELECTOR (filter));
g_return_if_fail (uri != NULL);
g_return_if_fail (async_handle != NULL);
- fselector = GNOME_FILE_SELECTOR (selector);
+ fselector = GNOME_FILE_SELECTOR (filter);
#ifdef DEBUG_ASYNC_STUFF
g_message (G_STRLOC ": %p - starting async reading (%s).",
- selector, uri);
+ fselector, uri);
#endif
vfs_uri = gnome_vfs_uri_new (uri);
@@ -623,8 +265,6 @@ add_directory_handler (GnomeSelector *selector, const gchar *uri,
async_data->type = GNOME_ASYNC_TYPE_ADD_URI;
async_data->fselector = fselector;
async_data->uri = vfs_uri;
- async_data->position = position;
- async_data->list_id = list_id;
async_data->async_handle = async_handle;
gnome_vfs_uri_ref (async_data->uri);
@@ -679,29 +319,6 @@ gnome_file_selector_clear_filter (GnomeFileSelector *fselector)
}
static void
-activate_entry_handler (GnomeSelector *selector)
-{
- GnomeFileSelector *fselector;
-#ifdef FIXME
- gchar *text;
-#endif
-
- g_return_if_fail (selector != NULL);
- g_return_if_fail (GNOME_IS_FILE_SELECTOR (selector));
-
- fselector = GNOME_FILE_SELECTOR (selector);
-
- if (gnome_file_selector_parent_class->activate_entry)
- gnome_file_selector_parent_class->activate_entry (selector);
-
-#ifdef FIXME
- text = gnome_selector_get_entry_text (selector);
- gnome_selector_add_uri (selector, NULL, text, 0, FALSE, NULL, NULL);
- g_free (text);
-#endif
-}
-
-static void
gnome_file_selector_init (GnomeFileSelector *fselector)
{
fselector->_priv = g_new0 (GnomeFileSelectorPrivate, 1);
@@ -734,7 +351,15 @@ check_uri_async_cb (GnomeVFSAsyncHandle *handle, GList *results, gpointer callba
gnome_async_handle_remove (async_handle, async_data);
- if (file->result != GNOME_VFS_OK) {
+ if ((file->result != GNOME_VFS_OK) ||
+ ((file->file_info->type != GNOME_VFS_FILE_TYPE_REGULAR) &&
+ (file->file_info->type != GNOME_VFS_FILE_TYPE_DIRECTORY))) {
+ gnome_async_handle_completed (async_handle, FALSE);
+ return;
+ }
+
+ if ((file->file_info->type == GNOME_VFS_FILE_TYPE_DIRECTORY) &&
+ !async_data->directory_ok) {
gnome_async_handle_completed (async_handle, FALSE);
return;
}
@@ -752,25 +377,26 @@ check_uri_async_cb (GnomeVFSAsyncHandle *handle, GList *results, gpointer callba
}
static void
-check_uri_handler (GnomeSelector *selector, const gchar *uri,
- GnomeAsyncHandle *async_handle)
+check_uri_handler (GnomeDirectoryFilter *filter, const gchar *uri,
+ gboolean directory_ok, GnomeAsyncHandle *async_handle)
{
GnomeFileAsyncData *async_data;
GnomeFileSelector *fselector;
GList fake_list;
- g_return_if_fail (selector != NULL);
- g_return_if_fail (GNOME_IS_FILE_SELECTOR (selector));
+ g_return_if_fail (filter != NULL);
+ g_return_if_fail (GNOME_IS_FILE_SELECTOR (filter));
g_return_if_fail (uri != NULL);
g_return_if_fail (async_handle != NULL);
- fselector = GNOME_FILE_SELECTOR (selector);
+ fselector = GNOME_FILE_SELECTOR (filter);
async_data = g_new0 (GnomeFileAsyncData, 1);
async_data->async_handle = async_handle;
async_data->type = GNOME_ASYNC_TYPE_CHECK_URI;
async_data->fselector = fselector;
async_data->uri = gnome_vfs_uri_new (uri);
+ async_data->directory_ok = directory_ok;
gnome_vfs_uri_ref (async_data->uri);
g_object_ref (G_OBJECT (async_data->fselector));
diff --git a/libgnome/gnome-file-selector.h b/libgnome/gnome-file-selector.h
index b73b324..dacd7fd 100644
--- a/libgnome/gnome-file-selector.h
+++ b/libgnome/gnome-file-selector.h
@@ -33,7 +33,7 @@
#define GNOME_FILE_SELECTOR_H
-#include <libgnome/gnome-selector.h>
+#include <libgnome/gnome-directory-filter.h>
#include <libgnomevfs/gnome-vfs-types.h>
#include <libgnomevfs/gnome-vfs-directory-filter.h>
@@ -54,14 +54,14 @@ typedef struct _GnomeFileSelectorPrivate GnomeFileSelectorPrivate;
typedef struct _GnomeFileSelectorClass GnomeFileSelectorClass;
struct _GnomeFileSelector {
- GnomeSelector selector;
+ GnomeDirectoryFilter filter;
/*< private >*/
GnomeFileSelectorPrivate *_priv;
};
struct _GnomeFileSelectorClass {
- GnomeSelectorClass parent_class;
+ GnomeDirectoryFilterClass parent_class;
};
diff --git a/libgnome/gnome-marshal.list b/libgnome/gnome-marshal.list
index 4c8a5df..159eca4 100644
--- a/libgnome/gnome-marshal.list
+++ b/libgnome/gnome-marshal.list
@@ -7,6 +7,7 @@ VOID:STRING,INT,UINT,BOXED
VOID:POINTER,INT,BOOLEAN,BOXED
VOID:UINT,UINT,UINT,UINT
VOID:STRING,BOXED
+VOID:STRING,BOOLEAN,BOXED
INT:VOID
ENUM:VOID
BOOLEAN:OBJECT
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]