summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog25
-rw-r--r--libnautilus-extensions/nautilus-directory-async.c2
-rw-r--r--libnautilus-extensions/nautilus-directory-metafile-monitor.c17
-rw-r--r--libnautilus-extensions/nautilus-directory-private.h3
-rw-r--r--libnautilus-extensions/nautilus-directory.c21
-rw-r--r--libnautilus-extensions/nautilus-metafile-server.idl1
-rw-r--r--libnautilus-extensions/nautilus-metafile.c40
-rw-r--r--libnautilus-extensions/nautilus-metafile.h2
-rw-r--r--libnautilus-private/nautilus-directory-async.c2
-rw-r--r--libnautilus-private/nautilus-directory-metafile-monitor.c17
-rw-r--r--libnautilus-private/nautilus-directory-private.h3
-rw-r--r--libnautilus-private/nautilus-directory.c21
-rw-r--r--libnautilus-private/nautilus-metafile-server.idl1
-rw-r--r--libnautilus-private/nautilus-metafile.c40
-rw-r--r--libnautilus-private/nautilus-metafile.h2
15 files changed, 175 insertions, 22 deletions
diff --git a/ChangeLog b/ChangeLog
index 0282dda5f..b2babe44d 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,28 @@
+2001-02-28 Michael Engber <engber@eazel.com>
+
+ reviewed by: Darin Adler <darin@eazel.com>
+
+ * libnautilus-extensions/nautilus-directory-async.c:
+ (metafile_read_mark_done):
+ * libnautilus-extensions/nautilus-directory-metafile-monitor.c:
+ (nautilus_metafile_monitor_get_epv), (corba_metafile_changed),
+ (corba_metafile_ready):
+ * libnautilus-extensions/nautilus-directory-private.h:
+ * libnautilus-extensions/nautilus-directory.c:
+ (nautilus_directory_find_file_by_relative_uri),
+ (nautilus_directory_find_file_by_internal_uri):
+ * libnautilus-extensions/nautilus-metafile-server.idl:
+ * libnautilus-extensions/nautilus-metafile.c: (corba_set),
+ (corba_set_list),
+ (nautilus_metafile_notify_metafile_ready),
+ (call_metafile_changed),
+ (call_metafile_changed_for_all_files_mentioned_in_metafile),
+ (call_metafile_changed_for_one_file):
+ * libnautilus-extensions/nautilus-metafile.h:
+ When a metafile is read in - change signals are sent to all
+ files rather than just the ones with metadata. Also fixed
+ it so change notifications to the "." file will happen. Bug 7044.
+
2001-02-28 Andy Hertzfeld <andy@eazel.com>
fixed bug 7138, non-ASCII characters in author's names causes
diff --git a/libnautilus-extensions/nautilus-directory-async.c b/libnautilus-extensions/nautilus-directory-async.c
index 0b90aae1d..027918fe8 100644
--- a/libnautilus-extensions/nautilus-directory-async.c
+++ b/libnautilus-extensions/nautilus-directory-async.c
@@ -458,7 +458,7 @@ metafile_read_mark_done (NautilusDirectory *directory)
nautilus_metafile_apply_pending_changes (directory);
/* Tell change-watchers that we have update information. */
- call_metafile_changed_for_all_files_mentioned_in_metafile (directory);
+ nautilus_metafile_notify_metafile_ready (directory);
/* Let the callers that were waiting for the metafile know. */
nautilus_directory_async_state_changed (directory);
diff --git a/libnautilus-extensions/nautilus-directory-metafile-monitor.c b/libnautilus-extensions/nautilus-directory-metafile-monitor.c
index 5bae8862e..5d82ce45b 100644
--- a/libnautilus-extensions/nautilus-directory-metafile-monitor.c
+++ b/libnautilus-extensions/nautilus-directory-metafile-monitor.c
@@ -44,6 +44,9 @@ static void corba_metafile_changed (PortableServer_Servant servant,
const Nautilus_FileNameList *file_names,
CORBA_Environment *ev);
+static void corba_metafile_ready (PortableServer_Servant servant,
+ CORBA_Environment *ev);
+
NAUTILUS_DEFINE_CLASS_BOILERPLATE (NautilusMetafileMonitor, nautilus_metafile_monitor, BONOBO_OBJECT_TYPE)
static void
@@ -58,6 +61,7 @@ nautilus_metafile_monitor_get_epv (void)
static POA_Nautilus_MetafileMonitor__epv epv;
epv.metafile_changed = corba_metafile_changed;
+ epv.metafile_ready = corba_metafile_ready;
return &epv;
}
@@ -139,7 +143,7 @@ corba_metafile_changed (PortableServer_Servant servant,
file_list = NULL;
for (buf_pos = 0; buf_pos < file_names->_length; ++buf_pos) {
- file = nautilus_directory_find_file_by_relative_uri
+ file = nautilus_directory_find_file_by_internal_uri
(monitor->details->directory, file_names->_buffer [buf_pos]);
if (file != NULL) {
@@ -157,3 +161,14 @@ corba_metafile_changed (PortableServer_Servant servant,
g_list_free (file_list);
}
}
+
+static void
+corba_metafile_ready (PortableServer_Servant servant,
+ CORBA_Environment *ev)
+{
+ NautilusMetafileMonitor *monitor;
+
+ monitor = NAUTILUS_METAFILE_MONITOR (bonobo_object_from_servant (servant));
+
+ emit_change_signals_for_all_files (monitor->details->directory);
+} \ No newline at end of file
diff --git a/libnautilus-extensions/nautilus-directory-private.h b/libnautilus-extensions/nautilus-directory-private.h
index e4bc4e09a..46a56bf57 100644
--- a/libnautilus-extensions/nautilus-directory-private.h
+++ b/libnautilus-extensions/nautilus-directory-private.h
@@ -180,6 +180,7 @@ void nautilus_directory_emit_files_changed (NautilusD
GList *changed_files);
void nautilus_directory_emit_change_signals (NautilusDirectory *directory,
GList *changed_files);
+void emit_change_signals_for_all_files (NautilusDirectory *directory);
void nautilus_directory_emit_done_loading (NautilusDirectory *directory);
void nautilus_directory_emit_load_error (NautilusDirectory *directory,
GnomeVFSResult error_result);
@@ -194,6 +195,8 @@ NautilusFile * nautilus_directory_find_file_by_name (NautilusD
const char *relative_uri);
NautilusFile * nautilus_directory_find_file_by_relative_uri (NautilusDirectory *directory,
const char *relative_uri);
+NautilusFile * nautilus_directory_find_file_by_internal_uri (NautilusDirectory *directory,
+ const char *relative_uri);
void nautilus_directory_add_file (NautilusDirectory *directory,
NautilusFile *file);
void nautilus_directory_remove_file (NautilusDirectory *directory,
diff --git a/libnautilus-extensions/nautilus-directory.c b/libnautilus-extensions/nautilus-directory.c
index 02a816c11..02dc17c02 100644
--- a/libnautilus-extensions/nautilus-directory.c
+++ b/libnautilus-extensions/nautilus-directory.c
@@ -240,7 +240,7 @@ filtering_changed_callback (gpointer callback_data)
g_hash_table_foreach (directories, invalidate_one_count, NULL);
}
-static void
+void
emit_change_signals_for_all_files (NautilusDirectory *directory)
{
GList *files;
@@ -709,6 +709,25 @@ nautilus_directory_find_file_by_relative_uri (NautilusDirectory *directory,
return node == NULL ? NULL : NAUTILUS_FILE (node->data);
}
+NautilusFile *
+nautilus_directory_find_file_by_internal_uri (NautilusDirectory *directory,
+ const char *relative_uri)
+{
+ NautilusFile *result;
+
+ if (nautilus_strcmp (relative_uri, ".") == 0) {
+ result = nautilus_directory_get_existing_corresponding_file (directory);
+ if (result != NULL) {
+ nautilus_file_unref (result);
+ g_return_val_if_fail (!GTK_OBJECT_DESTROYED (result), NULL);
+ }
+ } else {
+ result = nautilus_directory_find_file_by_relative_uri (directory, relative_uri);
+ }
+
+ return result;
+}
+
void
nautilus_directory_emit_files_added (NautilusDirectory *directory,
GList *added_files)
diff --git a/libnautilus-extensions/nautilus-metafile-server.idl b/libnautilus-extensions/nautilus-metafile-server.idl
index 7fdd262e5..5d0500399 100644
--- a/libnautilus-extensions/nautilus-metafile-server.idl
+++ b/libnautilus-extensions/nautilus-metafile-server.idl
@@ -35,6 +35,7 @@ module Nautilus {
*/
interface MetafileMonitor : ::Bonobo::Unknown {
void metafile_changed (in FileNameList file_names);
+ void metafile_ready ();
};
typedef sequence<string> MetadataList;
diff --git a/libnautilus-extensions/nautilus-metafile.c b/libnautilus-extensions/nautilus-metafile.c
index 0c99cbb50..783f912a7 100644
--- a/libnautilus-extensions/nautilus-metafile.c
+++ b/libnautilus-extensions/nautilus-metafile.c
@@ -121,7 +121,7 @@ static void copy_file_metadata (NautilusDirectory *source_directory,
static void remove_file_metadata (NautilusDirectory *directory,
const char *file_name);
-static void call_metatfile_changed_for_one_file (NautilusDirectory *directory,
+static void call_metafile_changed_for_one_file (NautilusDirectory *directory,
const CORBA_char *file_name);
NAUTILUS_DEFINE_CLASS_BOILERPLATE (NautilusMetafile, nautilus_metafile, BONOBO_OBJECT_TYPE)
@@ -325,7 +325,7 @@ corba_set (PortableServer_Servant servant,
directory = metafile->details->directory;
if (set_file_metadata (directory, file_name, key, default_value, metadata)) {
- call_metatfile_changed_for_one_file (directory, file_name);
+ call_metafile_changed_for_one_file (directory, file_name);
}
}
@@ -353,7 +353,7 @@ corba_set_list (PortableServer_Servant servant,
metadata_list = g_list_reverse (metadata_list);
if (set_file_metadata_list (directory, file_name, list_key, list_subkey, metadata_list)) {
- call_metatfile_changed_for_one_file (directory, file_name);
+ call_metafile_changed_for_one_file (directory, file_name);
}
g_list_free (metadata_list);
@@ -534,8 +534,31 @@ corba_unregister_monitor (PortableServer_Servant servant,
}
}
+void
+nautilus_metafile_notify_metafile_ready (NautilusDirectory *directory)
+{
+ GList *node;
+ CORBA_Environment ev;
+ Nautilus_MetafileMonitor monitor;
+ DirectoryMonitorListEntry *entry;
+
+ entry = g_hash_table_lookup (directory_monitor_lists, directory);
+
+ if (entry != NULL) {
+ CORBA_exception_init (&ev);
+
+ for (node = entry->monitors; node != NULL; node = node->next) {
+ monitor = node->data;
+ Nautilus_MetafileMonitor_metafile_ready (monitor, &ev);
+ /* FIXME bugzilla.eazel.com 6664: examine ev for errors */
+ }
+
+ CORBA_exception_free (&ev);
+ }
+}
+
static void
-call_metatfile_changed (NautilusDirectory *directory,
+call_metafile_changed (NautilusDirectory *directory,
const Nautilus_FileNameList *file_names)
{
GList *node;
@@ -589,23 +612,23 @@ call_metafile_changed_for_all_files_mentioned_in_metafile (NautilusDirectory *di
file_list_filler_ghfunc,
&file_names);
- call_metatfile_changed (directory, &file_names);
+ call_metafile_changed (directory, &file_names);
g_free (file_names._buffer);
}
}
static void
-call_metatfile_changed_for_one_file (NautilusDirectory *directory,
+call_metafile_changed_for_one_file (NautilusDirectory *directory,
const CORBA_char *file_name)
{
- Nautilus_FileNameList file_names;
+ Nautilus_FileNameList file_names = {0};
file_names._maximum = 1;
file_names._length = 1;
file_names._buffer = (CORBA_char **) &file_name;
- call_metatfile_changed (directory, &file_names);
+ call_metafile_changed (directory, &file_names);
}
typedef struct {
@@ -1451,3 +1474,4 @@ nautilus_metafile_set_metafile_contents (NautilusDirectory *directory,
}
}
}
+
diff --git a/libnautilus-extensions/nautilus-metafile.h b/libnautilus-extensions/nautilus-metafile.h
index 45f9e52e4..ca2f65bda 100644
--- a/libnautilus-extensions/nautilus-metafile.h
+++ b/libnautilus-extensions/nautilus-metafile.h
@@ -61,6 +61,8 @@ NautilusMetafile *nautilus_metafile_new (const char *directory_uri);
void call_metafile_changed_for_all_files_mentioned_in_metafile (NautilusDirectory *directory);
+void nautilus_metafile_notify_metafile_ready (NautilusDirectory *directory);
+
void nautilus_metafile_apply_pending_changes (NautilusDirectory *directory);
void nautilus_metafile_destroy (NautilusDirectory *directory);
diff --git a/libnautilus-private/nautilus-directory-async.c b/libnautilus-private/nautilus-directory-async.c
index 0b90aae1d..027918fe8 100644
--- a/libnautilus-private/nautilus-directory-async.c
+++ b/libnautilus-private/nautilus-directory-async.c
@@ -458,7 +458,7 @@ metafile_read_mark_done (NautilusDirectory *directory)
nautilus_metafile_apply_pending_changes (directory);
/* Tell change-watchers that we have update information. */
- call_metafile_changed_for_all_files_mentioned_in_metafile (directory);
+ nautilus_metafile_notify_metafile_ready (directory);
/* Let the callers that were waiting for the metafile know. */
nautilus_directory_async_state_changed (directory);
diff --git a/libnautilus-private/nautilus-directory-metafile-monitor.c b/libnautilus-private/nautilus-directory-metafile-monitor.c
index 5bae8862e..5d82ce45b 100644
--- a/libnautilus-private/nautilus-directory-metafile-monitor.c
+++ b/libnautilus-private/nautilus-directory-metafile-monitor.c
@@ -44,6 +44,9 @@ static void corba_metafile_changed (PortableServer_Servant servant,
const Nautilus_FileNameList *file_names,
CORBA_Environment *ev);
+static void corba_metafile_ready (PortableServer_Servant servant,
+ CORBA_Environment *ev);
+
NAUTILUS_DEFINE_CLASS_BOILERPLATE (NautilusMetafileMonitor, nautilus_metafile_monitor, BONOBO_OBJECT_TYPE)
static void
@@ -58,6 +61,7 @@ nautilus_metafile_monitor_get_epv (void)
static POA_Nautilus_MetafileMonitor__epv epv;
epv.metafile_changed = corba_metafile_changed;
+ epv.metafile_ready = corba_metafile_ready;
return &epv;
}
@@ -139,7 +143,7 @@ corba_metafile_changed (PortableServer_Servant servant,
file_list = NULL;
for (buf_pos = 0; buf_pos < file_names->_length; ++buf_pos) {
- file = nautilus_directory_find_file_by_relative_uri
+ file = nautilus_directory_find_file_by_internal_uri
(monitor->details->directory, file_names->_buffer [buf_pos]);
if (file != NULL) {
@@ -157,3 +161,14 @@ corba_metafile_changed (PortableServer_Servant servant,
g_list_free (file_list);
}
}
+
+static void
+corba_metafile_ready (PortableServer_Servant servant,
+ CORBA_Environment *ev)
+{
+ NautilusMetafileMonitor *monitor;
+
+ monitor = NAUTILUS_METAFILE_MONITOR (bonobo_object_from_servant (servant));
+
+ emit_change_signals_for_all_files (monitor->details->directory);
+} \ No newline at end of file
diff --git a/libnautilus-private/nautilus-directory-private.h b/libnautilus-private/nautilus-directory-private.h
index e4bc4e09a..46a56bf57 100644
--- a/libnautilus-private/nautilus-directory-private.h
+++ b/libnautilus-private/nautilus-directory-private.h
@@ -180,6 +180,7 @@ void nautilus_directory_emit_files_changed (NautilusD
GList *changed_files);
void nautilus_directory_emit_change_signals (NautilusDirectory *directory,
GList *changed_files);
+void emit_change_signals_for_all_files (NautilusDirectory *directory);
void nautilus_directory_emit_done_loading (NautilusDirectory *directory);
void nautilus_directory_emit_load_error (NautilusDirectory *directory,
GnomeVFSResult error_result);
@@ -194,6 +195,8 @@ NautilusFile * nautilus_directory_find_file_by_name (NautilusD
const char *relative_uri);
NautilusFile * nautilus_directory_find_file_by_relative_uri (NautilusDirectory *directory,
const char *relative_uri);
+NautilusFile * nautilus_directory_find_file_by_internal_uri (NautilusDirectory *directory,
+ const char *relative_uri);
void nautilus_directory_add_file (NautilusDirectory *directory,
NautilusFile *file);
void nautilus_directory_remove_file (NautilusDirectory *directory,
diff --git a/libnautilus-private/nautilus-directory.c b/libnautilus-private/nautilus-directory.c
index 02a816c11..02dc17c02 100644
--- a/libnautilus-private/nautilus-directory.c
+++ b/libnautilus-private/nautilus-directory.c
@@ -240,7 +240,7 @@ filtering_changed_callback (gpointer callback_data)
g_hash_table_foreach (directories, invalidate_one_count, NULL);
}
-static void
+void
emit_change_signals_for_all_files (NautilusDirectory *directory)
{
GList *files;
@@ -709,6 +709,25 @@ nautilus_directory_find_file_by_relative_uri (NautilusDirectory *directory,
return node == NULL ? NULL : NAUTILUS_FILE (node->data);
}
+NautilusFile *
+nautilus_directory_find_file_by_internal_uri (NautilusDirectory *directory,
+ const char *relative_uri)
+{
+ NautilusFile *result;
+
+ if (nautilus_strcmp (relative_uri, ".") == 0) {
+ result = nautilus_directory_get_existing_corresponding_file (directory);
+ if (result != NULL) {
+ nautilus_file_unref (result);
+ g_return_val_if_fail (!GTK_OBJECT_DESTROYED (result), NULL);
+ }
+ } else {
+ result = nautilus_directory_find_file_by_relative_uri (directory, relative_uri);
+ }
+
+ return result;
+}
+
void
nautilus_directory_emit_files_added (NautilusDirectory *directory,
GList *added_files)
diff --git a/libnautilus-private/nautilus-metafile-server.idl b/libnautilus-private/nautilus-metafile-server.idl
index 7fdd262e5..5d0500399 100644
--- a/libnautilus-private/nautilus-metafile-server.idl
+++ b/libnautilus-private/nautilus-metafile-server.idl
@@ -35,6 +35,7 @@ module Nautilus {
*/
interface MetafileMonitor : ::Bonobo::Unknown {
void metafile_changed (in FileNameList file_names);
+ void metafile_ready ();
};
typedef sequence<string> MetadataList;
diff --git a/libnautilus-private/nautilus-metafile.c b/libnautilus-private/nautilus-metafile.c
index 0c99cbb50..783f912a7 100644
--- a/libnautilus-private/nautilus-metafile.c
+++ b/libnautilus-private/nautilus-metafile.c
@@ -121,7 +121,7 @@ static void copy_file_metadata (NautilusDirectory *source_directory,
static void remove_file_metadata (NautilusDirectory *directory,
const char *file_name);
-static void call_metatfile_changed_for_one_file (NautilusDirectory *directory,
+static void call_metafile_changed_for_one_file (NautilusDirectory *directory,
const CORBA_char *file_name);
NAUTILUS_DEFINE_CLASS_BOILERPLATE (NautilusMetafile, nautilus_metafile, BONOBO_OBJECT_TYPE)
@@ -325,7 +325,7 @@ corba_set (PortableServer_Servant servant,
directory = metafile->details->directory;
if (set_file_metadata (directory, file_name, key, default_value, metadata)) {
- call_metatfile_changed_for_one_file (directory, file_name);
+ call_metafile_changed_for_one_file (directory, file_name);
}
}
@@ -353,7 +353,7 @@ corba_set_list (PortableServer_Servant servant,
metadata_list = g_list_reverse (metadata_list);
if (set_file_metadata_list (directory, file_name, list_key, list_subkey, metadata_list)) {
- call_metatfile_changed_for_one_file (directory, file_name);
+ call_metafile_changed_for_one_file (directory, file_name);
}
g_list_free (metadata_list);
@@ -534,8 +534,31 @@ corba_unregister_monitor (PortableServer_Servant servant,
}
}
+void
+nautilus_metafile_notify_metafile_ready (NautilusDirectory *directory)
+{
+ GList *node;
+ CORBA_Environment ev;
+ Nautilus_MetafileMonitor monitor;
+ DirectoryMonitorListEntry *entry;
+
+ entry = g_hash_table_lookup (directory_monitor_lists, directory);
+
+ if (entry != NULL) {
+ CORBA_exception_init (&ev);
+
+ for (node = entry->monitors; node != NULL; node = node->next) {
+ monitor = node->data;
+ Nautilus_MetafileMonitor_metafile_ready (monitor, &ev);
+ /* FIXME bugzilla.eazel.com 6664: examine ev for errors */
+ }
+
+ CORBA_exception_free (&ev);
+ }
+}
+
static void
-call_metatfile_changed (NautilusDirectory *directory,
+call_metafile_changed (NautilusDirectory *directory,
const Nautilus_FileNameList *file_names)
{
GList *node;
@@ -589,23 +612,23 @@ call_metafile_changed_for_all_files_mentioned_in_metafile (NautilusDirectory *di
file_list_filler_ghfunc,
&file_names);
- call_metatfile_changed (directory, &file_names);
+ call_metafile_changed (directory, &file_names);
g_free (file_names._buffer);
}
}
static void
-call_metatfile_changed_for_one_file (NautilusDirectory *directory,
+call_metafile_changed_for_one_file (NautilusDirectory *directory,
const CORBA_char *file_name)
{
- Nautilus_FileNameList file_names;
+ Nautilus_FileNameList file_names = {0};
file_names._maximum = 1;
file_names._length = 1;
file_names._buffer = (CORBA_char **) &file_name;
- call_metatfile_changed (directory, &file_names);
+ call_metafile_changed (directory, &file_names);
}
typedef struct {
@@ -1451,3 +1474,4 @@ nautilus_metafile_set_metafile_contents (NautilusDirectory *directory,
}
}
}
+
diff --git a/libnautilus-private/nautilus-metafile.h b/libnautilus-private/nautilus-metafile.h
index 45f9e52e4..ca2f65bda 100644
--- a/libnautilus-private/nautilus-metafile.h
+++ b/libnautilus-private/nautilus-metafile.h
@@ -61,6 +61,8 @@ NautilusMetafile *nautilus_metafile_new (const char *directory_uri);
void call_metafile_changed_for_all_files_mentioned_in_metafile (NautilusDirectory *directory);
+void nautilus_metafile_notify_metafile_ready (NautilusDirectory *directory);
+
void nautilus_metafile_apply_pending_changes (NautilusDirectory *directory);
void nautilus_metafile_destroy (NautilusDirectory *directory);