summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog30
-rw-r--r--libnautilus-private/nautilus-global-preferences.c2
-rw-r--r--libnautilus/nautilus-clipboard.c65
-rw-r--r--src/file-manager/fm-properties-window.c2
4 files changed, 66 insertions, 33 deletions
diff --git a/ChangeLog b/ChangeLog
index f3d16bade..82de84b7e 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,35 @@
2002-03-04 Darin Adler <darin@bentspoon.com>
+ * libnautilus-private/nautilus-global-preferences.c:
+ (nautilus_global_preferences_init_with_folder_browsing):
+ Call the real nautilus_global_preferences_init. Without this, all
+ hell breaks loose.
+
+ * libnautilus/nautilus-clipboard.c:
+ (merge_in_clipboard_menu_items), (merge_out_clipboard_menu_items):
+ Don't do anything if things are NULL. Helps us destroy cleanly.
+ (focus_changed_callback): Add missing gboolean return value. These
+ days, signal handlers have to be more careful.
+ (target_destroy_callback): NULL things out instead of freeing
+ since destroy can happen more than once.
+ (nautilus_clipboard_set_up_editable): Do a weak ref so the target
+ data gets freed.
+ (first_focus_callback): Add missing gboolean return value. These
+ days, signal handlers have to be more careful.
+
+ * src/file-manager/fm-properties-window.c: (name_field_focus_out):
+ Return FALSE, not TRUE.
+
+2002-03-04 Darin Adler <darin@bentspoon.com>
+
+ * libnautilus/nautilus-clipboard.c:
+ (clipboard_items_are_merged_in), (focus_changed_callback),
+ (target_destroy_callback), (nautilus_clipboard_set_up_editable),
+ (first_focus_callback):
+ * src/file-manager/fm-properties-window.c: (name_field_focus_out):
+
+2002-03-04 Darin Adler <darin@bentspoon.com>
+
* libnautilus-private/nautilus-directory.c:
(nautilus_directory_notify_files_removed): Don't pay any attention
if we're told about removal of a file we're renaming.
diff --git a/libnautilus-private/nautilus-global-preferences.c b/libnautilus-private/nautilus-global-preferences.c
index d1000f48d..15fbbb52d 100644
--- a/libnautilus-private/nautilus-global-preferences.c
+++ b/libnautilus-private/nautilus-global-preferences.c
@@ -918,6 +918,8 @@ nautilus_global_preferences_init_with_folder_browsing (void)
"default_folder_viewer"
};
+ nautilus_global_preferences_init ();
+
if (browse_initialized) {
return;
}
diff --git a/libnautilus/nautilus-clipboard.c b/libnautilus/nautilus-clipboard.c
index 4f869cf19..9f8736aa8 100644
--- a/libnautilus/nautilus-clipboard.c
+++ b/libnautilus/nautilus-clipboard.c
@@ -199,14 +199,14 @@ set_clipboard_menu_items_insensitive (BonoboUIComponent *component)
typedef struct {
BonoboUIComponent *component;
Bonobo_UIContainer container;
- gboolean editable_shares_selection_changes;
+ gboolean editable_shares_selection_changes;
} TargetCallbackData;
static gboolean
clipboard_items_are_merged_in (GtkWidget *widget)
{
return GPOINTER_TO_INT (g_object_get_data (G_OBJECT (widget),
- "Nautilus:clipboard_menu_items_merged"));
+ "Nautilus:clipboard_menu_items_merged"));
}
static void
@@ -231,6 +231,10 @@ merge_in_clipboard_menu_items (GObject *widget_as_object,
container = target_data->container;
add_selection_callback = target_data->editable_shares_selection_changes;
+ if (ui == NULL || container == CORBA_OBJECT_NIL) {
+ return;
+ }
+
bonobo_ui_component_set_container (ui, container, NULL);
bonobo_ui_component_freeze (ui, NULL);
bonobo_ui_util_set_ui (ui,
@@ -263,6 +267,11 @@ merge_out_clipboard_menu_items (GObject *widget_as_object,
g_assert (target_data != NULL);
ui = BONOBO_UI_COMPONENT (target_data->component);
selection_callback_was_added = target_data->editable_shares_selection_changes;
+
+ if (ui == NULL) {
+ return;
+ }
+
bonobo_ui_component_unset_container (ui, NULL);
if (selection_callback_was_added) {
@@ -275,31 +284,23 @@ merge_out_clipboard_menu_items (GObject *widget_as_object,
set_clipboard_items_are_merged_in (widget_as_object, FALSE);
}
-static void
+static gboolean
focus_changed_callback (GtkWidget *widget,
GdkEventAny *event,
gpointer callback_data)
{
- TargetCallbackData *target_data;
- BonoboUIComponent *ui;
-
- g_assert (GTK_IS_EDITABLE (widget));
- g_assert (callback_data != NULL);
- target_data = callback_data;
- g_assert (BONOBO_IS_UI_COMPONENT (target_data->component));
-
/* Connect the component to the container if the widget has focus. */
- ui = target_data->component;
if (GTK_WIDGET_HAS_FOCUS (widget)) {
if (!clipboard_items_are_merged_in (widget)) {
- merge_in_clipboard_menu_items (G_OBJECT (widget), target_data);
+ merge_in_clipboard_menu_items (G_OBJECT (widget), callback_data);
}
} else {
if (clipboard_items_are_merged_in (widget)) {
- merge_out_clipboard_menu_items (G_OBJECT (widget), target_data);
+ merge_out_clipboard_menu_items (G_OBJECT (widget), callback_data);
}
-
}
+
+ return FALSE;
}
static void
@@ -332,15 +333,14 @@ target_destroy_callback (GtkObject *object,
g_assert (callback_data != NULL);
target_data = callback_data;
- g_assert (BONOBO_IS_UI_COMPONENT (target_data->component));
- /* Disconnect the component from the container, and then free
- * everything.
- */
- bonobo_ui_component_unset_container (target_data->component, NULL);
- bonobo_object_unref (target_data->component);
+ if (target_data->component != NULL) {
+ bonobo_ui_component_unset_container (target_data->component, NULL);
+ bonobo_object_unref (target_data->component);
+ target_data->component = NULL;
+ }
bonobo_object_release_unref (target_data->container, NULL);
- g_free (target_data);
+ target_data->container = CORBA_OBJECT_NIL;
}
static TargetCallbackData *
@@ -370,8 +370,7 @@ initialize_clipboard_component_with_callback_data (GtkEditable *target,
target_data = g_new (TargetCallbackData, 1);
target_data->component = ui;
target_data->container = bonobo_object_dup_ref (ui_container, NULL);
- target_data->editable_shares_selection_changes =
- shares_selection_changes;
+ target_data->editable_shares_selection_changes = shares_selection_changes;
return target_data;
}
@@ -391,13 +390,14 @@ nautilus_clipboard_set_up_editable (GtkEditable *target,
ui_container,
shares_selection_changes);
- g_signal_connect_after (target, "focus_in_event",
- G_CALLBACK (focus_changed_callback), target_data);
- g_signal_connect_after (target, "focus_out_event",
- G_CALLBACK (focus_changed_callback), target_data);
-
+ g_signal_connect (target, "focus_in_event",
+ G_CALLBACK (focus_changed_callback), target_data);
+ g_signal_connect (target, "focus_out_event",
+ G_CALLBACK (focus_changed_callback), target_data);
g_signal_connect (target, "destroy",
- G_CALLBACK (target_destroy_callback), target_data);
+ G_CALLBACK (target_destroy_callback), target_data);
+
+ g_object_weak_ref (G_OBJECT (target), (GWeakNotify) g_free, target_data);
/* Call the focus changed callback once to merge if the window is
* already in focus.
@@ -405,7 +405,6 @@ nautilus_clipboard_set_up_editable (GtkEditable *target,
focus_changed_callback (GTK_WIDGET (target), NULL, target_data);
}
-
static gboolean
widget_was_set_up_with_selection_sensitivity (GtkWidget *widget)
{
@@ -413,7 +412,7 @@ widget_was_set_up_with_selection_sensitivity (GtkWidget *widget)
"Nautilus:shares_selection_changes"));
}
-static void
+static gboolean
first_focus_callback (GtkWidget *widget,
GdkEventAny *event,
gpointer callback_data)
@@ -430,6 +429,8 @@ first_focus_callback (GtkWidget *widget,
(GTK_EDITABLE (widget),
bonobo_control_get_remote_ui_container (BONOBO_CONTROL (callback_data), NULL),
widget_was_set_up_with_selection_sensitivity (widget));
+
+ return FALSE;
}
static void
diff --git a/src/file-manager/fm-properties-window.c b/src/file-manager/fm-properties-window.c
index 0aa83a1c4..dea142327 100644
--- a/src/file-manager/fm-properties-window.c
+++ b/src/file-manager/fm-properties-window.c
@@ -527,7 +527,7 @@ name_field_focus_out (NautilusEntry *name_field,
name_field_done_editing (name_field, FM_PROPERTIES_WINDOW (callback_data));
}
- return TRUE;
+ return FALSE;
}
static void