diff options
author | Darin Adler <darin@src.gnome.org> | 2000-10-18 21:43:35 +0000 |
---|---|---|
committer | Darin Adler <darin@src.gnome.org> | 2000-10-18 21:43:35 +0000 |
commit | e5483a3a3c4bff78a57b7621f1b3832949426948 (patch) | |
tree | 73f023c34c5f81416ee8d48f1e6dbad2db6f6070 | |
parent | 14dbbeaddfad425cca25f49648754957ad4e973d (diff) | |
download | nautilus-e5483a3a3c4bff78a57b7621f1b3832949426948.tar.gz |
Use calls by new names.
* components/notes/nautilus-notes.c: (make_notes_view):
* src/nautilus-location-bar.c: (nautilus_location_bar_new):
* src/nautilus-simple-search-bar.c:
(nautilus_simple_search_bar_new):
Use calls by new names.
* libnautilus-extensions/nautilus-undo-signal-handlers.c:
(editable_key_press_event), (nautilus_undo_editable_set_undo_key):
Disabled the undo-key part of undo also. The old code was actually
harmless because it got the name of the signal wrong, but it's
better to have it disabled.
* src/nautilus-shell-ui.xml: Added a comment that points out the
2nd place where undo has been disabled.
* libnautilus/nautilus-clipboard.h:
* libnautilus/nautilus-clipboard.c: (cut_callback),
(copy_callback), (paste_callback), (clear_callback),
(set_paste_sensitive_if_clipboard_contains_data),
(focus_changed_callback), (target_destroy_callback),
(nautilus_clipboard_set_up_editable), (first_focus_callback),
(control_destroyed_callback),
(nautilus_clipboard_set_up_editable_in_control),
(disconnect_set_up_in_control_handlers):
Some minor cleanup of the clipboard code. Includes bug fixes for
items that are already in focus when the clipboard is hooked up
(should never happen), and a fix for code that was using
gtk_signal_disconnect on something that was connected with
gtk_signal_connect_while_alive (doesn't work). Also got rid of
misguided code that was copying a Bonobo_UIContainer with memcpy
(since Bonobo_UIContainer is just a pointer).
* src/Makefile.am:
* src/nautilus-window-private.h:
Changed source file name from nautilus-service-menu to
nautilus-service-ui, since it does a toolbar item, not just a
menu.
* src/nautilus-window-service-ui.c:
* src/nautilus-window-service-ui.h:
A second cut at the service UI code. It no longer leaks a UI
component.
* src/nautilus-window.c: (nautilus_window_constructed),
(nautilus_window_get_ui_container): Use our own pointer to the UI
container instead of asking the shell UI for its container.
-rw-r--r-- | ChangeLog | 48 | ||||
-rw-r--r-- | components/notes/nautilus-notes.c | 2 | ||||
-rw-r--r-- | libnautilus-extensions/nautilus-undo-signal-handlers.c | 52 | ||||
-rw-r--r-- | libnautilus-private/nautilus-undo-signal-handlers.c | 52 | ||||
-rw-r--r-- | libnautilus/nautilus-clipboard.c | 326 | ||||
-rw-r--r-- | libnautilus/nautilus-clipboard.h | 21 | ||||
-rw-r--r-- | src/Makefile.am | 3 | ||||
-rw-r--r-- | src/nautilus-location-bar.c | 5 | ||||
-rw-r--r-- | src/nautilus-navigation-window.c | 17 | ||||
-rw-r--r-- | src/nautilus-object-window.c | 17 | ||||
-rw-r--r-- | src/nautilus-shell-ui.xml | 3 | ||||
-rw-r--r-- | src/nautilus-simple-search-bar.c | 5 | ||||
-rw-r--r-- | src/nautilus-spatial-window.c | 17 | ||||
-rw-r--r-- | src/nautilus-window-private.h | 15 | ||||
-rw-r--r-- | src/nautilus-window-service-ui.c (renamed from src/nautilus-window-service-menu.c) | 68 | ||||
-rw-r--r-- | src/nautilus-window-service-ui.h | 32 | ||||
-rw-r--r-- | src/nautilus-window.c | 17 |
17 files changed, 400 insertions, 300 deletions
@@ -1,3 +1,51 @@ +2000-10-18 Darin Adler <darin@eazel.com> + + * components/notes/nautilus-notes.c: (make_notes_view): + * src/nautilus-location-bar.c: (nautilus_location_bar_new): + * src/nautilus-simple-search-bar.c: + (nautilus_simple_search_bar_new): + Use calls by new names. + + * libnautilus-extensions/nautilus-undo-signal-handlers.c: + (editable_key_press_event), (nautilus_undo_editable_set_undo_key): + Disabled the undo-key part of undo also. The old code was actually + harmless because it got the name of the signal wrong, but it's + better to have it disabled. + * src/nautilus-shell-ui.xml: Added a comment that points out the + 2nd place where undo has been disabled. + + * libnautilus/nautilus-clipboard.h: + * libnautilus/nautilus-clipboard.c: (cut_callback), + (copy_callback), (paste_callback), (clear_callback), + (set_paste_sensitive_if_clipboard_contains_data), + (focus_changed_callback), (target_destroy_callback), + (nautilus_clipboard_set_up_editable), (first_focus_callback), + (control_destroyed_callback), + (nautilus_clipboard_set_up_editable_in_control), + (disconnect_set_up_in_control_handlers): + Some minor cleanup of the clipboard code. Includes bug fixes for + items that are already in focus when the clipboard is hooked up + (should never happen), and a fix for code that was using + gtk_signal_disconnect on something that was connected with + gtk_signal_connect_while_alive (doesn't work). Also got rid of + misguided code that was copying a Bonobo_UIContainer with memcpy + (since Bonobo_UIContainer is just a pointer). + + * src/Makefile.am: + * src/nautilus-window-private.h: + Changed source file name from nautilus-service-menu to + nautilus-service-ui, since it does a toolbar item, not just a + menu. + + * src/nautilus-window-service-ui.c: + * src/nautilus-window-service-ui.h: + A second cut at the service UI code. It no longer leaks a UI + component. + + * src/nautilus-window.c: (nautilus_window_constructed), + (nautilus_window_get_ui_container): Use our own pointer to the UI + container instead of asking the shell UI for its container. + 2000-10-18 John Sullivan <sullivan@eazel.com> Fixed bug 3862 (Icon view reversed after looking at list view) diff --git a/components/notes/nautilus-notes.c b/components/notes/nautilus-notes.c index 9288c91ba..a3476fd06 100644 --- a/components/notes/nautilus-notes.c +++ b/components/notes/nautilus-notes.c @@ -185,7 +185,7 @@ make_notes_view (BonoboGenericFactory *Factory, const char *goad_id, gpointer cl notes_load_location, notes); /* handle selections */ - nautilus_clipboard_set_up_editable_from_bonobo_control + nautilus_clipboard_set_up_editable_in_control (GTK_EDITABLE (notes->note_text_field), nautilus_view_get_bonobo_control (notes->view)); diff --git a/libnautilus-extensions/nautilus-undo-signal-handlers.c b/libnautilus-extensions/nautilus-undo-signal-handlers.c index 1af3b1c82..f7c9f3e6b 100644 --- a/libnautilus-extensions/nautilus-undo-signal-handlers.c +++ b/libnautilus-extensions/nautilus-undo-signal-handlers.c @@ -284,23 +284,35 @@ restore_editable_from_undo_snapshot_callback (GtkObject *target, gpointer callba * Allow the use of ctrl-z from within widget. */ -static void +/* Undo is disabled until we have a better implementation. + * Both here and in nautilus-shell-ui.xml. + */ + +#ifdef UNDO_ENABLED + +/* FIXME: This needs a return value of gboolean. */ +static void editable_key_press_event (GtkEditable *editable, GdkEventKey *event, gpointer user_data) { switch (event->keyval) { - /* Undo */ - case 'z': - if ((event->state & GDK_CONTROL_MASK) != 0) { - nautilus_undo (GTK_OBJECT (editable)); - return; - } - break; - - default: - break; + /* Undo */ + case 'z': + if ((event->state & GDK_CONTROL_MASK) != 0) { + nautilus_undo (GTK_OBJECT (editable)); + /* FIXME: Need to stop the signal to prevent + * re-handling the same event. + */ + return; + } + break; + + default: + break; } } +#endif + /* editable_set_undo_key * * Allow the use of ctrl-z from within widget. This should only be @@ -310,16 +322,18 @@ editable_key_press_event (GtkEditable *editable, GdkEventKey *event, gpointer us void nautilus_undo_editable_set_undo_key (GtkEditable *editable, gboolean value) { +#ifdef UNDO_ENABLED if (value) { /* Connect to entry signals */ gtk_signal_connect (GTK_OBJECT (editable), - "key-press-event", - GTK_SIGNAL_FUNC (editable_key_press_event), - NULL); - } - else { + "key_press_event", + GTK_SIGNAL_FUNC (editable_key_press_event), + NULL); + } else { + /* FIXME: This warns if the handler is already connected. */ gtk_signal_disconnect_by_func (GTK_OBJECT (editable), - GTK_SIGNAL_FUNC (editable_key_press_event), - NULL); - } + GTK_SIGNAL_FUNC (editable_key_press_event), + NULL); + } +#endif } diff --git a/libnautilus-private/nautilus-undo-signal-handlers.c b/libnautilus-private/nautilus-undo-signal-handlers.c index 1af3b1c82..f7c9f3e6b 100644 --- a/libnautilus-private/nautilus-undo-signal-handlers.c +++ b/libnautilus-private/nautilus-undo-signal-handlers.c @@ -284,23 +284,35 @@ restore_editable_from_undo_snapshot_callback (GtkObject *target, gpointer callba * Allow the use of ctrl-z from within widget. */ -static void +/* Undo is disabled until we have a better implementation. + * Both here and in nautilus-shell-ui.xml. + */ + +#ifdef UNDO_ENABLED + +/* FIXME: This needs a return value of gboolean. */ +static void editable_key_press_event (GtkEditable *editable, GdkEventKey *event, gpointer user_data) { switch (event->keyval) { - /* Undo */ - case 'z': - if ((event->state & GDK_CONTROL_MASK) != 0) { - nautilus_undo (GTK_OBJECT (editable)); - return; - } - break; - - default: - break; + /* Undo */ + case 'z': + if ((event->state & GDK_CONTROL_MASK) != 0) { + nautilus_undo (GTK_OBJECT (editable)); + /* FIXME: Need to stop the signal to prevent + * re-handling the same event. + */ + return; + } + break; + + default: + break; } } +#endif + /* editable_set_undo_key * * Allow the use of ctrl-z from within widget. This should only be @@ -310,16 +322,18 @@ editable_key_press_event (GtkEditable *editable, GdkEventKey *event, gpointer us void nautilus_undo_editable_set_undo_key (GtkEditable *editable, gboolean value) { +#ifdef UNDO_ENABLED if (value) { /* Connect to entry signals */ gtk_signal_connect (GTK_OBJECT (editable), - "key-press-event", - GTK_SIGNAL_FUNC (editable_key_press_event), - NULL); - } - else { + "key_press_event", + GTK_SIGNAL_FUNC (editable_key_press_event), + NULL); + } else { + /* FIXME: This warns if the handler is already connected. */ gtk_signal_disconnect_by_func (GTK_OBJECT (editable), - GTK_SIGNAL_FUNC (editable_key_press_event), - NULL); - } + GTK_SIGNAL_FUNC (editable_key_press_event), + NULL); + } +#endif } diff --git a/libnautilus/nautilus-clipboard.c b/libnautilus/nautilus-clipboard.c index 1b27828d7..1242e4ebc 100644 --- a/libnautilus/nautilus-clipboard.c +++ b/libnautilus/nautilus-clipboard.c @@ -30,72 +30,58 @@ #include <config.h> #include "nautilus-clipboard.h" -#include "nautilus-bonobo-ui.h" -#include <gdk/gdk.h> -#include <gtk/gtk.h> -#include <libgnome/gnome-defs.h> -#include <libgnome/gnome-i18n.h> #include <bonobo/bonobo-ui-util.h> +#include <gtk/gtksignal.h> +static void disconnect_set_up_in_control_handlers (GtkObject *object, + gpointer callback_data); static void -cut_callback (BonoboUIComponent *ui_component, +cut_callback (BonoboUIComponent *ui, gpointer callback_data, - const char *cname) + const char *command_name) { - GtkEditable *editable_widget; - - g_assert (BONOBO_IS_UI_COMPONENT (ui_component)); - g_assert (strcmp (cname, "Cut") == 0); + g_assert (BONOBO_IS_UI_COMPONENT (ui)); + g_assert (strcmp (command_name, "Cut") == 0); - editable_widget = GTK_EDITABLE (callback_data); - gtk_editable_cut_clipboard (editable_widget); + gtk_editable_cut_clipboard (GTK_EDITABLE (callback_data)); } static void -copy_callback (BonoboUIComponent *ui_component, +copy_callback (BonoboUIComponent *ui, gpointer callback_data, - const char *cname) + const char *command_name) { - GtkEditable *editable_widget; - - g_assert (BONOBO_IS_UI_COMPONENT (ui_component)); - g_assert (strcmp (cname, "Copy") == 0); + g_assert (BONOBO_IS_UI_COMPONENT (ui)); + g_assert (strcmp (command_name, "Copy") == 0); - editable_widget = GTK_EDITABLE (callback_data); - gtk_editable_copy_clipboard (editable_widget); + gtk_editable_copy_clipboard (GTK_EDITABLE (callback_data)); } static void -paste_callback (BonoboUIComponent *ui_component, +paste_callback (BonoboUIComponent *ui, gpointer callback_data, - const char *cname) + const char *command_name) { - GtkEditable *editable_widget; - - g_assert (BONOBO_IS_UI_COMPONENT (ui_component)); - g_assert (strcmp (cname, "Paste") == 0); + g_assert (BONOBO_IS_UI_COMPONENT (ui)); + g_assert (strcmp (command_name, "Paste") == 0); - editable_widget = GTK_EDITABLE (callback_data); - gtk_editable_paste_clipboard (editable_widget); + gtk_editable_paste_clipboard (GTK_EDITABLE (callback_data)); } static void -clear_callback (BonoboUIComponent *ui_component, +clear_callback (BonoboUIComponent *ui, gpointer callback_data, - const char *cname) + const char *command_name) { - GtkEditable *editable_widget; - - g_assert (BONOBO_IS_UI_COMPONENT (ui_component)); - g_assert (strcmp (cname, "Clear") == 0); + g_assert (BONOBO_IS_UI_COMPONENT (ui)); + g_assert (strcmp (command_name, "Clear") == 0); - - editable_widget = GTK_EDITABLE (callback_data); - gtk_editable_delete_selection (editable_widget); + gtk_editable_delete_selection (GTK_EDITABLE (callback_data)); } -#ifdef N0 +#ifdef SENSITIVITY_ADJUSTMENT_WORKS + static void set_paste_sensitive_if_clipboard_contains_data (BonoboUIHandler *ui_handler) { @@ -108,56 +94,8 @@ set_paste_sensitive_if_clipboard_contains_data (BonoboUIHandler *ui_handler) NAUTILUS_MENU_PATH_PASTE_ITEM, clipboard_contains_data); } -#endif static void -add_menu_items_callback (GtkWidget *widget, - GdkEventAny *event, - gpointer callback_data) -{ - BonoboUIComponent *ui_component; - gpointer container_data; - Bonobo_UIContainer container; - BonoboUIVerb verbs [] = { - BONOBO_UI_VERB ("Cut", (BonoboUIVerbFn) cut_callback), - BONOBO_UI_VERB ("Copy", (BonoboUIVerbFn) copy_callback), - BONOBO_UI_VERB ("Paste", (BonoboUIVerbFn) paste_callback), - BONOBO_UI_VERB ("Clear", (BonoboUIVerbFn) clear_callback), - BONOBO_UI_VERB_END - }; - - ui_component = gtk_object_get_data (GTK_OBJECT (widget), "clipboard_ui_component"); - container_data = gtk_object_get_data (GTK_OBJECT (widget), "associated_ui_container"); - container = * (Bonobo_UIContainer *) container_data; - - bonobo_ui_component_set_container (ui_component, - container); - bonobo_ui_util_set_ui (ui_component, - DATADIR, - "nautilus-clipboard-ui.xml", - "nautilus"); - g_assert (BONOBO_IS_UI_COMPONENT (ui_component)); - - /* Add the verbs */ - bonobo_ui_component_add_verb_list_with_data (ui_component, verbs, widget); - /* FIXME bugzilla.eazel.com 733: Update the sensitivities */ - -} - -static void -remove_menu_items_callback (GtkWidget *widget, - GdkEventAny *event, - gpointer callback_data) -{ - BonoboUIComponent *ui_component; - - ui_component = gtk_object_get_data (GTK_OBJECT (widget), "clipboard_ui_component"); - bonobo_ui_component_unset_container (ui_component); - -} - -#ifdef N0 -static void set_clipboard_menu_items_sensitive (BonoboUIHandler *ui_handler) { @@ -197,113 +135,167 @@ set_clipboard_menu_items_insensitive (BonoboUIHandler *ui_handler, FALSE); } } + #endif +typedef struct { + BonoboUIComponent *component; + Bonobo_UIContainer container; +} TargetCallbackData; + static void -container_copy_free (gpointer data) +focus_changed_callback (GtkWidget *widget, + GdkEventAny *event, + gpointer callback_data) { - g_free (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)) { + bonobo_ui_component_set_container (ui, + target_data->container); + bonobo_ui_component_freeze (ui, NULL); + bonobo_ui_util_set_ui (ui, + DATADIR, + "nautilus-clipboard-ui.xml", + "nautilus"); + bonobo_ui_component_thaw (ui, NULL); + + /* FIXME bugzilla.eazel.com 733: Update sensitivities of the + * commands now, also arrange for them to stay updated as the + * state of the editable changes. + */ + } else { + bonobo_ui_component_unset_container (ui); + } } static void -ui_component_remove_container_and_unref (gpointer data) +target_destroy_callback (GtkObject *object, + gpointer callback_data) { - BonoboUIComponent *ui; - - ui = BONOBO_UI_COMPONENT (data); - - bonobo_ui_component_unset_container (ui); - bonobo_object_unref (BONOBO_OBJECT (ui)); + TargetCallbackData *target_data; + + 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); + bonobo_object_unref (BONOBO_OBJECT (target_data->component)); + bonobo_object_release_unref (target_data->container, NULL); + g_free (target_data); } -static void -finish_setting_up_editable (GtkEditable *target, - Bonobo_UIContainer container) +void +nautilus_clipboard_set_up_editable (GtkEditable *target, + Bonobo_UIContainer ui_container) { + BonoboUIVerb verbs [] = { + BONOBO_UI_VERB ("Cut", cut_callback), + BONOBO_UI_VERB ("Copy", copy_callback), + BONOBO_UI_VERB ("Paste", paste_callback), + BONOBO_UI_VERB ("Clear", clear_callback), + BONOBO_UI_VERB_END + }; BonoboUIComponent *ui; - Bonobo_UIContainer *ui_container; - char *component_name; - - /* Create a unique component name for each clipboard item, - since they are registered and deregistered by name */ - component_name = g_strdup_printf ("Clipboard %p", target); - ui = bonobo_ui_component_new (component_name); - g_free (component_name); + TargetCallbackData *target_data; - ui_container = g_new0 (Bonobo_UIContainer, 1); - memcpy (ui_container, &container, sizeof (Bonobo_UIContainer)); - - /* Free the ui component when we get rid of the widget */ - gtk_object_set_data_full (GTK_OBJECT (target), "clipboard_ui_component", - ui, ui_component_remove_container_and_unref); - gtk_object_set_data_full (GTK_OBJECT (target), "associated_ui_container", - ui_container, container_copy_free); - - gtk_signal_connect (GTK_OBJECT (target), "focus_in_event", - GTK_SIGNAL_FUNC (add_menu_items_callback), - NULL); - gtk_signal_connect (GTK_OBJECT (target), "focus_out_event", - GTK_SIGNAL_FUNC (remove_menu_items_callback), - NULL); - - + g_return_if_fail (GTK_IS_EDITABLE (target)); + g_return_if_fail (ui_container != CORBA_OBJECT_NIL); + + /* Create the UI component and set up the verbs. */ + ui = bonobo_ui_component_new_default (); + bonobo_ui_component_add_verb_list_with_data (ui, verbs, target); + + /* Do the actual connection of the UI to the container at + * focus time, and disconnect at both focus and destroy + * time. + */ + target_data = g_new (TargetCallbackData, 1); + bonobo_object_ref (BONOBO_OBJECT (ui)); + target_data->component = ui; + target_data->container = bonobo_object_dup_ref (ui_container, NULL); + gtk_signal_connect_after (GTK_OBJECT (target), "focus_in_event", + focus_changed_callback, target_data); + gtk_signal_connect_after (GTK_OBJECT (target), "focus_out_event", + focus_changed_callback, target_data); + gtk_signal_connect (GTK_OBJECT (target), "destroy", + target_destroy_callback, target_data); + + /* Call the focus changed callback once to merge if the window is + * already in focus. + */ + focus_changed_callback (GTK_WIDGET (target), NULL, target_data); } static void -finish_setting_up_editable_from_bonobo_control_callback (gpointer data, - GdkEventAny *event, - gpointer user_data) +first_focus_callback (GtkWidget *widget, + GdkEventAny *event, + gpointer callback_data) { - GtkEditable *target; - BonoboControl *control; - - target = GTK_EDITABLE (data); - control = BONOBO_CONTROL (user_data); - - /* Don't set up the clipboard again on future focus_in's */ - gtk_signal_disconnect_by_func (GTK_OBJECT (data), - GTK_SIGNAL_FUNC (finish_setting_up_editable_from_bonobo_control_callback), - user_data); - - finish_setting_up_editable (target, - bonobo_control_get_remote_ui_container (control)); - - /* Do the initial merging */ - add_menu_items_callback (GTK_WIDGET (target), - NULL, - NULL); - + /* Don't set up the clipboard again on future focus_in's. This + * is one-time work. + */ + disconnect_set_up_in_control_handlers + (GTK_OBJECT (widget), + callback_data); + + /* Do the rest of the setup. */ + nautilus_clipboard_set_up_editable + (GTK_EDITABLE (widget), + bonobo_control_get_remote_ui_container (BONOBO_CONTROL (callback_data))); +} +static void +control_destroyed_callback (GtkObject *object, + gpointer callback_data) +{ + disconnect_set_up_in_control_handlers + (object, callback_data); } void -nautilus_clipboard_set_up_editable_from_bonobo_control (GtkEditable *target, - BonoboControl *control) +nautilus_clipboard_set_up_editable_in_control (GtkEditable *target, + BonoboControl *control) { - - g_return_if_fail (GTK_IS_EDITABLE (target)); g_return_if_fail (BONOBO_IS_CONTROL (control)); /* Use lazy initialization, so that we wait until after - embedding, and thus for the ability to get the remote - ui container */ - gtk_signal_connect_while_alive (GTK_OBJECT (target), - "focus_in_event", - finish_setting_up_editable_from_bonobo_control_callback, - control, GTK_OBJECT (control)); - + * embedding. At that point, the UI container will be set up, + * but it's not necessarily set up now. + */ + /* We'd like to use gtk_signal_connect_while_alive, but it's + * not compatible with gtk_signal_disconnect calls. + */ + gtk_signal_connect (GTK_OBJECT (target), + "focus_in_event", + first_focus_callback, + control); + gtk_signal_connect (GTK_OBJECT (target), + "destroy", + control_destroyed_callback, + control); } - -void -nautilus_clipboard_set_up_editable_from_bonobo_ui_container (GtkEditable *target, - Bonobo_UIContainer ui_container) +static void +disconnect_set_up_in_control_handlers (GtkObject *object, + gpointer callback_data) { - - - g_return_if_fail (GTK_IS_EDITABLE (target)); - finish_setting_up_editable (target, - ui_container); + gtk_signal_disconnect_by_func (object, + first_focus_callback, + callback_data); + gtk_signal_disconnect_by_func (object, + control_destroyed_callback, + callback_data); } - diff --git a/libnautilus/nautilus-clipboard.h b/libnautilus/nautilus-clipboard.h index 8bef6fbc7..16c01d73b 100644 --- a/libnautilus/nautilus-clipboard.h +++ b/libnautilus/nautilus-clipboard.h @@ -29,14 +29,19 @@ #include <gtk/gtkeditable.h> #include <bonobo/bonobo-control.h> -/* Components should use this, which includes menu merging. */ -void nautilus_clipboard_set_up_editable_from_bonobo_control (GtkEditable *target, - BonoboControl *control); +/* This makes this editable put clipboard commands into the passed UI + * container when the editable is in focus. Callers in Nautilus + * normally get the UI container from + * nautilus_window_get_bonobo_ui_container. + */ +void nautilus_clipboard_set_up_editable (GtkEditable *target, + Bonobo_UIContainer container); -/* Local editable widgets should set up clipboard capabilities using this function. - They can obtain their local ui container using the function - nautilus_window_get_bonobo_ui_container */ -void nautilus_clipboard_set_up_editable_from_bonobo_ui_container (GtkEditable *target, - Bonobo_UIContainer container); +/* Components should use this convenient cover instead of the call + * above. This cover waits until the UI container shows up, so it can be + * called even before the control has a UI container. + */ +void nautilus_clipboard_set_up_editable_in_control (GtkEditable *target, + BonoboControl *control); #endif /* NAUTILUS_CLIPBOARD_H */ diff --git a/src/Makefile.am b/src/Makefile.am index be0bb7b6e..aafc5934c 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -86,6 +86,7 @@ noinst_HEADERS = \ nautilus-view-frame.h \ nautilus-window-manage-views.h \ nautilus-window-private.h \ + nautilus-window-service-ui.h \ nautilus-window.h \ nautilus-zoom-control.h \ $(profiler_headers) \ @@ -126,7 +127,7 @@ nautilus_SOURCES = \ nautilus-view-frame.c \ nautilus-window-manage-views.c \ nautilus-window-menus.c \ - nautilus-window-service-menu.c \ + nautilus-window-service-ui.c \ nautilus-window-toolbars.c \ nautilus-window.c \ nautilus-zoom-control.c \ diff --git a/src/nautilus-location-bar.c b/src/nautilus-location-bar.c index ff1f1ce84..132866e64 100644 --- a/src/nautilus-location-bar.c +++ b/src/nautilus-location-bar.c @@ -510,8 +510,9 @@ nautilus_location_bar_new (NautilusWindow *window) location_bar = NAUTILUS_LOCATION_BAR (bar); /* Clipboard */ - nautilus_clipboard_set_up_editable_from_bonobo_ui_container (GTK_EDITABLE (location_bar->entry), - nautilus_window_get_bonobo_ui_container (window)); + nautilus_clipboard_set_up_editable + (GTK_EDITABLE (location_bar->entry), + nautilus_window_get_ui_container (window)); return bar; } diff --git a/src/nautilus-navigation-window.c b/src/nautilus-navigation-window.c index 360a188d5..b081b88ef 100644 --- a/src/nautilus-navigation-window.c +++ b/src/nautilus-navigation-window.c @@ -38,6 +38,7 @@ #include "nautilus-switchable-navigation-bar.h" #include "nautilus-throbber.h" #include "nautilus-window-manage-views.h" +#include "nautilus-window-service-ui.h" #include "nautilus-zoom-control.h" #include <bonobo/bonobo-ui-util.h> #include <ctype.h> @@ -344,19 +345,17 @@ nautilus_window_constructed (NautilusWindow *window) window->details->shell_ui = bonobo_ui_component_new ("Nautilus Shell"); bonobo_ui_component_set_container (window->details->shell_ui, - bonobo_object_corba_objref (BONOBO_OBJECT (window->details->ui_container))); + nautilus_window_get_ui_container (window)); bonobo_ui_component_freeze (window->details->shell_ui, NULL); - bonobo_ui_util_set_ui (window->details->shell_ui, DATADIR, "nautilus-shell-ui.xml", "nautilus"); bonobo_ui_component_thaw (window->details->shell_ui, NULL); - /* merge in the services menu if necessary */ - + /* Load the services part of the user interface too if desired. */ #ifdef EAZEL_SERVICES - nautilus_window_install_service_menu (window); + nautilus_window_install_service_ui (window); #endif /* set up location bar */ @@ -1797,11 +1796,9 @@ nautilus_window_show (GtkWidget *widget) } Bonobo_UIContainer -nautilus_window_get_bonobo_ui_container (NautilusWindow *window) +nautilus_window_get_ui_container (NautilusWindow *window) { - g_return_val_if_fail (NAUTILUS_IS_WINDOW (window), NULL); + g_return_val_if_fail (NAUTILUS_IS_WINDOW (window), CORBA_OBJECT_NIL); - /* FIXME: Do we have to ref the container here? */ - return bonobo_ui_component_get_container (window->details->shell_ui); + return bonobo_object_corba_objref (BONOBO_OBJECT (window->details->ui_container)); } - diff --git a/src/nautilus-object-window.c b/src/nautilus-object-window.c index 360a188d5..b081b88ef 100644 --- a/src/nautilus-object-window.c +++ b/src/nautilus-object-window.c @@ -38,6 +38,7 @@ #include "nautilus-switchable-navigation-bar.h" #include "nautilus-throbber.h" #include "nautilus-window-manage-views.h" +#include "nautilus-window-service-ui.h" #include "nautilus-zoom-control.h" #include <bonobo/bonobo-ui-util.h> #include <ctype.h> @@ -344,19 +345,17 @@ nautilus_window_constructed (NautilusWindow *window) window->details->shell_ui = bonobo_ui_component_new ("Nautilus Shell"); bonobo_ui_component_set_container (window->details->shell_ui, - bonobo_object_corba_objref (BONOBO_OBJECT (window->details->ui_container))); + nautilus_window_get_ui_container (window)); bonobo_ui_component_freeze (window->details->shell_ui, NULL); - bonobo_ui_util_set_ui (window->details->shell_ui, DATADIR, "nautilus-shell-ui.xml", "nautilus"); bonobo_ui_component_thaw (window->details->shell_ui, NULL); - /* merge in the services menu if necessary */ - + /* Load the services part of the user interface too if desired. */ #ifdef EAZEL_SERVICES - nautilus_window_install_service_menu (window); + nautilus_window_install_service_ui (window); #endif /* set up location bar */ @@ -1797,11 +1796,9 @@ nautilus_window_show (GtkWidget *widget) } Bonobo_UIContainer -nautilus_window_get_bonobo_ui_container (NautilusWindow *window) +nautilus_window_get_ui_container (NautilusWindow *window) { - g_return_val_if_fail (NAUTILUS_IS_WINDOW (window), NULL); + g_return_val_if_fail (NAUTILUS_IS_WINDOW (window), CORBA_OBJECT_NIL); - /* FIXME: Do we have to ref the container here? */ - return bonobo_ui_component_get_container (window->details->shell_ui); + return bonobo_object_corba_objref (BONOBO_OBJECT (window->details->ui_container)); } - diff --git a/src/nautilus-shell-ui.xml b/src/nautilus-shell-ui.xml index 2442bc515..87dbd47d8 100644 --- a/src/nautilus-shell-ui.xml +++ b/src/nautilus-shell-ui.xml @@ -76,7 +76,8 @@ <submenu name="Edit" _label="_Edit"> -<!-- Undo is disabled until we have a better implementation +<!-- Undo is disabled until we have a better implementation. + Both here and in nautilus-undo-signal-handlers.c. <menuitem name="Undo" _label="_Undo" diff --git a/src/nautilus-simple-search-bar.c b/src/nautilus-simple-search-bar.c index 7e14a7f70..4d0ed7b1e 100644 --- a/src/nautilus-simple-search-bar.c +++ b/src/nautilus-simple-search-bar.c @@ -131,8 +131,9 @@ nautilus_simple_search_bar_new (NautilusWindow *window) bar->details->entry = NAUTILUS_ENTRY (nautilus_entry_new ()); nautilus_undo_set_up_nautilus_entry_for_undo (bar->details->entry); nautilus_undo_editable_set_undo_key (GTK_EDITABLE (bar->details->entry), TRUE); - nautilus_clipboard_set_up_editable_from_bonobo_ui_container (GTK_EDITABLE (bar->details->entry), - nautilus_window_get_bonobo_ui_container (window)); + nautilus_clipboard_set_up_editable + (GTK_EDITABLE (bar->details->entry), + nautilus_window_get_ui_container (window)); gtk_signal_connect_object (GTK_OBJECT (bar->details->entry), "activate", nautilus_gtk_button_auto_click, diff --git a/src/nautilus-spatial-window.c b/src/nautilus-spatial-window.c index 360a188d5..b081b88ef 100644 --- a/src/nautilus-spatial-window.c +++ b/src/nautilus-spatial-window.c @@ -38,6 +38,7 @@ #include "nautilus-switchable-navigation-bar.h" #include "nautilus-throbber.h" #include "nautilus-window-manage-views.h" +#include "nautilus-window-service-ui.h" #include "nautilus-zoom-control.h" #include <bonobo/bonobo-ui-util.h> #include <ctype.h> @@ -344,19 +345,17 @@ nautilus_window_constructed (NautilusWindow *window) window->details->shell_ui = bonobo_ui_component_new ("Nautilus Shell"); bonobo_ui_component_set_container (window->details->shell_ui, - bonobo_object_corba_objref (BONOBO_OBJECT (window->details->ui_container))); + nautilus_window_get_ui_container (window)); bonobo_ui_component_freeze (window->details->shell_ui, NULL); - bonobo_ui_util_set_ui (window->details->shell_ui, DATADIR, "nautilus-shell-ui.xml", "nautilus"); bonobo_ui_component_thaw (window->details->shell_ui, NULL); - /* merge in the services menu if necessary */ - + /* Load the services part of the user interface too if desired. */ #ifdef EAZEL_SERVICES - nautilus_window_install_service_menu (window); + nautilus_window_install_service_ui (window); #endif /* set up location bar */ @@ -1797,11 +1796,9 @@ nautilus_window_show (GtkWidget *widget) } Bonobo_UIContainer -nautilus_window_get_bonobo_ui_container (NautilusWindow *window) +nautilus_window_get_ui_container (NautilusWindow *window) { - g_return_val_if_fail (NAUTILUS_IS_WINDOW (window), NULL); + g_return_val_if_fail (NAUTILUS_IS_WINDOW (window), CORBA_OBJECT_NIL); - /* FIXME: Do we have to ref the container here? */ - return bonobo_ui_component_get_container (window->details->shell_ui); + return bonobo_object_corba_objref (BONOBO_OBJECT (window->details->ui_container)); } - diff --git a/src/nautilus-window-private.h b/src/nautilus-window-private.h index 785d9d802..a92151a8b 100644 --- a/src/nautilus-window-private.h +++ b/src/nautilus-window-private.h @@ -107,8 +107,6 @@ GList * nautilus_get_history_list (void); void nautilus_window_add_bookmark_for_current_location (NautilusWindow *window); void nautilus_window_initialize_menus (NautilusWindow *window); void nautilus_window_initialize_toolbars (NautilusWindow *window); -void nautilus_window_install_service_menu (NautilusWindow *window); - void nautilus_window_go_back (NautilusWindow *window); void nautilus_window_go_forward (NautilusWindow *window); void nautilus_window_go_up (NautilusWindow *window); @@ -135,15 +133,6 @@ void nautilus_window_add_sidebar_panel (Nautilus NautilusViewFrame *sidebar_panel); void nautilus_window_remove_sidebar_panel (NautilusWindow *window, NautilusViewFrame *sidebar_panel); -Bonobo_UIContainer nautilus_window_get_bonobo_ui_container (NautilusWindow *window); -#endif /* NAUTILUS_WINDOW_PRIVATE_H */ - - - - - - - - - +Bonobo_UIContainer nautilus_window_get_ui_container (NautilusWindow *window); +#endif /* NAUTILUS_WINDOW_PRIVATE_H */ diff --git a/src/nautilus-window-service-menu.c b/src/nautilus-window-service-ui.c index 500ee17a0..7a93e724e 100644 --- a/src/nautilus-window-service-menu.c +++ b/src/nautilus-window-service-ui.c @@ -1,6 +1,6 @@ /* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- - nautilus-service-menu.c: integrate the built-in service menu + nautilus-service-ui.c: integrate the built-in service ui Copyright (C) 2000 Eazel, Inc. @@ -21,42 +21,54 @@ Author: Andy Hertzfeld <andy@eazel.com> */ + #include <config.h> +#include "nautilus-window-service-ui.h" -#include <bonobo/bonobo-control.h> #include <bonobo/bonobo-ui-util.h> - -#include "nautilus-window.h" #include "nautilus-window-private.h" - static void goto_services_summary (BonoboUIComponent *component, - gpointer user_data, - const char *verb) + gpointer callback_data, + const char *verb) { - nautilus_window_goto_uri (NAUTILUS_WINDOW (user_data), "eazel:"); + nautilus_window_goto_uri (NAUTILUS_WINDOW (callback_data), + "eazel:"); } static void goto_online_storage (BonoboUIComponent *component, - gpointer user_data, - const char *verb) + gpointer callback_data, + const char *verb) { - nautilus_window_goto_uri (NAUTILUS_WINDOW (user_data), "eazel:vault"); + nautilus_window_goto_uri (NAUTILUS_WINDOW (callback_data), + "eazel:vault"); } static void goto_software_catalog (BonoboUIComponent *component, - gpointer user_data, - const char *verb) + gpointer callback_data, + const char *verb) +{ + nautilus_window_goto_uri (NAUTILUS_WINDOW (callback_data), + "eazel:catalog"); +} + +static void +detach_service_ui (gpointer data) { - nautilus_window_goto_uri (NAUTILUS_WINDOW (user_data), "eazel:catalog"); + BonoboUIComponent *service_ui; + + service_ui = BONOBO_UI_COMPONENT (data); + bonobo_ui_component_unset_container (service_ui); + bonobo_object_unref (BONOBO_OBJECT (service_ui)); } -void nautilus_window_install_service_menu (NautilusWindow *window) +void +nautilus_window_install_service_ui (NautilusWindow *window) { - BonoboUIComponent *ui_component; + BonoboUIComponent *service_ui; BonoboUIVerb verbs [] = { BONOBO_UI_VERB ("Eazel Services", goto_services_summary), @@ -65,20 +77,22 @@ void nautilus_window_install_service_menu (NautilusWindow *window) BONOBO_UI_VERB_END }; - ui_component = bonobo_ui_component_new ("Eazel Services"); - + /* Load UI from the XML file. */ + service_ui = bonobo_ui_component_new ("Eazel Services"); + bonobo_ui_component_add_verb_list_with_data (service_ui, verbs, window); bonobo_ui_component_set_container - (ui_component, - bonobo_object_corba_objref (BONOBO_OBJECT (window->details->ui_container))); - bonobo_ui_component_freeze (ui_component, NULL); - - bonobo_ui_util_set_ui (ui_component, + (service_ui, + nautilus_window_get_ui_container (window)); + bonobo_ui_component_freeze (service_ui, NULL); + bonobo_ui_util_set_ui (service_ui, DATADIR, "nautilus-service-ui.xml", "nautilus"); - bonobo_ui_component_thaw (ui_component, NULL); + bonobo_ui_component_thaw (service_ui, NULL); - bonobo_ui_component_add_verb_list_with_data (ui_component, verbs, window); + /* Attach the UI to the window. */ + gtk_object_set_data_full (GTK_OBJECT (window), + "service UI", + service_ui, + detach_service_ui); } - - diff --git a/src/nautilus-window-service-ui.h b/src/nautilus-window-service-ui.h new file mode 100644 index 000000000..750cc09d0 --- /dev/null +++ b/src/nautilus-window-service-ui.h @@ -0,0 +1,32 @@ +/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- + + nautilus-service-ui.h: integrate the built-in service UI additions + + Copyright (C) 2000 Eazel, Inc. + + This program is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License as + published by the Free Software Foundation; either version 2 of the + License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. + + You should have received a copy of the GNU General Public + License along with this program; if not, write to the + Free Software Foundation, Inc., 59 Temple Place - Suite 330, + Boston, MA 02111-1307, USA. + + Author: Darin Adler <darin@eazel.com> +*/ + +#ifndef NAUTILUS_WINDOW_SERVICE_UI_H +#define NAUTILUS_WINDOW_SERVICE_UI_H + +#include "nautilus-window.h" + +void nautilus_window_install_service_ui (NautilusWindow *window); + +#endif /* NAUTILUS_WINDOW_SERVICE_UI_H */ diff --git a/src/nautilus-window.c b/src/nautilus-window.c index 360a188d5..b081b88ef 100644 --- a/src/nautilus-window.c +++ b/src/nautilus-window.c @@ -38,6 +38,7 @@ #include "nautilus-switchable-navigation-bar.h" #include "nautilus-throbber.h" #include "nautilus-window-manage-views.h" +#include "nautilus-window-service-ui.h" #include "nautilus-zoom-control.h" #include <bonobo/bonobo-ui-util.h> #include <ctype.h> @@ -344,19 +345,17 @@ nautilus_window_constructed (NautilusWindow *window) window->details->shell_ui = bonobo_ui_component_new ("Nautilus Shell"); bonobo_ui_component_set_container (window->details->shell_ui, - bonobo_object_corba_objref (BONOBO_OBJECT (window->details->ui_container))); + nautilus_window_get_ui_container (window)); bonobo_ui_component_freeze (window->details->shell_ui, NULL); - bonobo_ui_util_set_ui (window->details->shell_ui, DATADIR, "nautilus-shell-ui.xml", "nautilus"); bonobo_ui_component_thaw (window->details->shell_ui, NULL); - /* merge in the services menu if necessary */ - + /* Load the services part of the user interface too if desired. */ #ifdef EAZEL_SERVICES - nautilus_window_install_service_menu (window); + nautilus_window_install_service_ui (window); #endif /* set up location bar */ @@ -1797,11 +1796,9 @@ nautilus_window_show (GtkWidget *widget) } Bonobo_UIContainer -nautilus_window_get_bonobo_ui_container (NautilusWindow *window) +nautilus_window_get_ui_container (NautilusWindow *window) { - g_return_val_if_fail (NAUTILUS_IS_WINDOW (window), NULL); + g_return_val_if_fail (NAUTILUS_IS_WINDOW (window), CORBA_OBJECT_NIL); - /* FIXME: Do we have to ref the container here? */ - return bonobo_ui_component_get_container (window->details->shell_ui); + return bonobo_object_corba_objref (BONOBO_OBJECT (window->details->ui_container)); } - |