Allow to register shortcuts for in-process IIDs so that activation doesn't

2003-11-03  Alexander Larsson  <alexl@redhat.com>

	* libnautilus-private/nautilus-bonobo-extensions.h:
	* libnautilus-private/nautilus-bonobo-extensions.c:
	(nautilus_bonobo_register_activation_shortcut),
	(nautilus_bonobo_unregister_activation_shortcut),
	(nautilus_bonobo_activate_from_id):
	Allow to register shortcuts for in-process IIDs so
	that activation doesn't go through bonobo-activation.

	* src/nautilus-application.c: (create_object_shortcut),
	(nautilus_application_instance_init),
	(nautilus_application_destroy):
	* components/emblem/libmain.c:
	* components/history/libmain.c:
	* components/notes/nautilus-notes.c:
	* components/tree/libmain.c:
	Register activation shortcuts.

	* src/nautilus-navigation-window.c:
	(nautilus_navigation_window_hide_sidebar),
	(nautilus_navigation_window_show_sidebar):
	Avoid gratuitus gconf write.
This commit is contained in:
Alexander Larsson 2003-11-03 14:12:38 +00:00 committed by Alexander Larsson
parent b9ba65cf0a
commit fb27d9086b
9 changed files with 213 additions and 8 deletions

View file

@ -1,3 +1,27 @@
2003-11-03 Alexander Larsson <alexl@redhat.com>
* libnautilus-private/nautilus-bonobo-extensions.h:
* libnautilus-private/nautilus-bonobo-extensions.c:
(nautilus_bonobo_register_activation_shortcut),
(nautilus_bonobo_unregister_activation_shortcut),
(nautilus_bonobo_activate_from_id):
Allow to register shortcuts for in-process IIDs so
that activation doesn't go through bonobo-activation.
* src/nautilus-application.c: (create_object_shortcut),
(nautilus_application_instance_init),
(nautilus_application_destroy):
* components/emblem/libmain.c:
* components/history/libmain.c:
* components/notes/nautilus-notes.c:
* components/tree/libmain.c:
Register activation shortcuts.
* src/nautilus-navigation-window.c:
(nautilus_navigation_window_hide_sidebar),
(nautilus_navigation_window_show_sidebar):
Avoid gratuitus gconf write.
2003-11-01 Alexander Larsson <alexl@redhat.com>
* src/nautilus-window.c (nautilus_window_hide_status_bar)

View file

@ -30,12 +30,13 @@
#include "nautilus-emblem-view.h"
#include <bonobo.h>
#include <bonobo-activation/bonobo-activation.h>
#include <libnautilus-private/nautilus-bonobo-extensions.h>
static gboolean shortcut_registered = FALSE;
static CORBA_Object
emblem_shlib_make_object (PortableServer_POA poa,
const char *iid,
gpointer impl_ptr,
CORBA_Environment *ev)
create_object (const char *iid,
gpointer callback_data)
{
NautilusEmblemView *view;
@ -45,9 +46,32 @@ emblem_shlib_make_object (PortableServer_POA poa,
view = NAUTILUS_EMBLEM_VIEW (g_object_new (NAUTILUS_TYPE_EMBLEM_VIEW, NULL));
return CORBA_Object_duplicate (BONOBO_OBJREF (view), NULL);
}
static CORBA_Object
emblem_shlib_make_object (PortableServer_POA poa,
const char *iid,
gpointer impl_ptr,
CORBA_Environment *ev)
{
NautilusEmblemView *view;
if (!shortcut_registered) {
nautilus_bonobo_register_activation_shortcut (EMBLEM_VIEW_IID,
create_object, NULL);
shortcut_registered = TRUE;
}
if (strcmp (iid, EMBLEM_VIEW_IID) != 0) {
return CORBA_OBJECT_NIL;
}
view = NAUTILUS_EMBLEM_VIEW (g_object_new (NAUTILUS_TYPE_EMBLEM_VIEW, NULL));
bonobo_activation_plugin_use (poa, impl_ptr);
return CORBA_Object_duplicate (BONOBO_OBJREF (view), ev);
return CORBA_Object_duplicate (BONOBO_OBJREF (view), NULL);
}
static const BonoboActivationPluginObject emblem_plugin_list[] = {

View file

@ -30,6 +30,24 @@
#include "nautilus-history-view.h"
#include <bonobo.h>
#include <bonobo-activation/bonobo-activation.h>
#include <libnautilus-private/nautilus-bonobo-extensions.h>
static gboolean shortcut_registered = FALSE;
static CORBA_Object
create_object (const char *iid,
gpointer callback_data)
{
NautilusHistoryView *view;
if (strcmp (iid, VIEW_IID) != 0) {
return CORBA_OBJECT_NIL;
}
view = NAUTILUS_HISTORY_VIEW (g_object_new (NAUTILUS_TYPE_HISTORY_VIEW, NULL));
return CORBA_Object_duplicate (BONOBO_OBJREF (view), NULL);
}
static CORBA_Object
history_shlib_make_object (PortableServer_POA poa,
@ -39,6 +57,12 @@ history_shlib_make_object (PortableServer_POA poa,
{
NautilusHistoryView *view;
if (!shortcut_registered) {
nautilus_bonobo_register_activation_shortcut (VIEW_IID,
create_object, NULL);
shortcut_registered = TRUE;
}
if (strcmp (iid, VIEW_IID) != 0) {
return CORBA_OBJECT_NIL;
}

View file

@ -46,6 +46,7 @@
#include <libnautilus/nautilus-clipboard.h>
#include <libnautilus/nautilus-view.h>
#include <libnautilus/nautilus-view-standard-main.h>
#include <libnautilus-private/nautilus-bonobo-extensions.h>
/* FIXME bugzilla.gnome.org 44436:
* Undo not working in notes-view.
@ -434,6 +435,23 @@ make_notes_view ()
return BONOBO_OBJECT (notes->view);
}
static gboolean shortcut_registered = FALSE;
static CORBA_Object
create_object (const char *iid,
gpointer callback_data)
{
BonoboObject *view;
if (strcmp (iid, VIEW_IID) != 0) {
return CORBA_OBJECT_NIL;
}
view = make_notes_view ();
return CORBA_Object_duplicate (BONOBO_OBJREF (view), NULL);
}
static CORBA_Object
notes_shlib_make_object (PortableServer_POA poa,
@ -443,6 +461,12 @@ notes_shlib_make_object (PortableServer_POA poa,
{
BonoboObject *view;
if (!shortcut_registered) {
nautilus_bonobo_register_activation_shortcut (VIEW_IID,
create_object, NULL);
shortcut_registered = TRUE;
}
if (strcmp (iid, VIEW_IID) != 0) {
return CORBA_OBJECT_NIL;
}

View file

@ -30,6 +30,24 @@
#include "nautilus-tree-view.h"
#include <bonobo.h>
#include <bonobo-activation/bonobo-activation.h>
#include <libnautilus-private/nautilus-bonobo-extensions.h>
static gboolean shortcut_registered = FALSE;
static CORBA_Object
create_object (const char *iid,
gpointer callback_data)
{
NautilusTreeView *view;
if (strcmp (iid, TREE_VIEW_IID) != 0) {
return CORBA_OBJECT_NIL;
}
view = NAUTILUS_TREE_VIEW (g_object_new (NAUTILUS_TYPE_TREE_VIEW, NULL));
return CORBA_Object_duplicate (BONOBO_OBJREF (view), NULL);
}
static CORBA_Object
tree_shlib_make_object (PortableServer_POA poa,
@ -39,6 +57,12 @@ tree_shlib_make_object (PortableServer_POA poa,
{
NautilusTreeView *view;
if (!shortcut_registered) {
nautilus_bonobo_register_activation_shortcut (TREE_VIEW_IID,
create_object, NULL);
shortcut_registered = TRUE;
}
if (strcmp (iid, TREE_VIEW_IID) != 0) {
return CORBA_OBJECT_NIL;
}

View file

@ -30,6 +30,7 @@
#include <eel/eel-string.h>
#include <eel/eel-gnome-extensions.h>
#include <eel/eel-debug.h>
#include <bonobo/bonobo-ui-util.h>
#include <gtk/gtkmain.h>
#include <libgnomevfs/gnome-vfs-utils.h>
@ -507,6 +508,44 @@ activation_handle_free (NautilusBonoboActivationHandle *handle)
g_free (handle);
}
static GHashTable *nautilus_activation_shortcuts = NULL;
struct CreateObjectData {
NautilusBonoboCreateObject create_object;
gpointer callback_data;
};
void
nautilus_bonobo_register_activation_shortcut (const char *iid,
NautilusBonoboCreateObject create_object_callback,
gpointer callback_data)
{
struct CreateObjectData *data;
if (nautilus_activation_shortcuts == NULL) {
nautilus_activation_shortcuts = g_hash_table_new_full
(g_str_hash, g_str_equal, g_free, g_free);
eel_debug_call_at_shutdown_with_data ((GFreeFunc)g_hash_table_destroy,
nautilus_activation_shortcuts);
}
data = g_new (struct CreateObjectData, 1);
data->create_object = create_object_callback;
data->callback_data = callback_data;
g_hash_table_insert (nautilus_activation_shortcuts,
g_strdup (iid), data);
}
void
nautilus_bonobo_unregister_activation_shortcut (const char *iid)
{
if (nautilus_activation_shortcuts == NULL) {
g_assert_not_reached ();
return;
}
g_hash_table_remove (nautilus_activation_shortcuts, iid);
}
static gboolean
activation_idle_callback (gpointer callback_data)
{
@ -567,7 +606,9 @@ nautilus_bonobo_activate_from_id (const char *iid,
gpointer callback_data)
{
NautilusBonoboActivationHandle *handle;
struct CreateObjectData *data;
CORBA_Object activated_object;
g_return_val_if_fail (iid != NULL, NULL);
g_return_val_if_fail (callback != NULL, NULL);
@ -577,6 +618,23 @@ nautilus_bonobo_activate_from_id (const char *iid,
handle->callback = callback;
handle->callback_data = callback_data;
handle->activated_object = CORBA_OBJECT_NIL;
if (nautilus_activation_shortcuts != NULL) {
data = g_hash_table_lookup (nautilus_activation_shortcuts, iid);
if (data != NULL) {
activated_object = (*data->create_object) (iid, data->callback_data);
if (activated_object != CORBA_OBJECT_NIL) {
handle->activated_object = activated_object;
handle->early_completion_hook = NULL;
handle->idle_id = g_idle_add (activation_idle_callback,
handle);
return handle;
}
}
}
bonobo_activation_activate_from_id_async ((char *) iid, 0,
bonobo_activation_activation_callback,
handle, NULL);

View file

@ -29,6 +29,7 @@
#include <bonobo/bonobo-ui-component.h>
#include <bonobo/bonobo-xobject.h>
#include <bonobo/bonobo-generic-factory.h>
#include <gdk-pixbuf/gdk-pixbuf.h>
typedef struct NautilusBonoboActivationHandle NautilusBonoboActivationHandle;
@ -37,6 +38,9 @@ typedef void (*NautilusBonoboActivationCallback) (NautilusBonoboActivationHandle
Bonobo_Unknown activated_object,
gpointer callback_data);
typedef CORBA_Object (*NautilusBonoboCreateObject) (const char *iid,
gpointer callback_data);
void nautilus_bonobo_set_accelerator (BonoboUIComponent *ui,
const char *path,
const char *accelerator);
@ -99,6 +103,10 @@ void nautilus_bonobo_set_icon
const char *path,
const char *icon_relative_path);
void nautilus_bonobo_register_activation_shortcut (const char *iid,
NautilusBonoboCreateObject create_object_callback,
gpointer callback_data);
void nautilus_bonobo_unregister_activation_shortcut (const char *iid);
NautilusBonoboActivationHandle *nautilus_bonobo_activate_from_id (const char *iid,
NautilusBonoboActivationCallback callback,
gpointer callback_data);

View file

@ -152,6 +152,13 @@ nautilus_application_get_spatial_window_list (void)
return nautilus_application_spatial_window_list;
}
static CORBA_Object
create_object_shortcut (const char *iid,
gpointer callback_data)
{
return create_object (BONOBO_OBJREF (callback_data), iid, NULL);
}
static void
nautilus_application_instance_init (NautilusApplication *application)
{
@ -165,6 +172,11 @@ nautilus_application_instance_init (NautilusApplication *application)
/* Watch for volume unmounts so we can close open windows */
g_signal_connect_object (nautilus_volume_monitor_get (), "volume_unmounted",
G_CALLBACK (volume_unmounted_callback), application, 0);
nautilus_bonobo_register_activation_shortcut (NAUTILUS_ICON_VIEW_IID, create_object_shortcut, application);
nautilus_bonobo_register_activation_shortcut (NAUTILUS_DESKTOP_ICON_VIEW_IID, create_object_shortcut, application);
nautilus_bonobo_register_activation_shortcut (NAUTILUS_LIST_VIEW_IID, create_object_shortcut, application);
nautilus_bonobo_register_activation_shortcut (SEARCH_LIST_VIEW_IID, create_object_shortcut, application);
}
NautilusApplication *
@ -188,6 +200,11 @@ nautilus_application_destroy (BonoboObject *object)
application = NAUTILUS_APPLICATION (object);
nautilus_bonobo_unregister_activation_shortcut (NAUTILUS_ICON_VIEW_IID);
nautilus_bonobo_unregister_activation_shortcut (NAUTILUS_DESKTOP_ICON_VIEW_IID);
nautilus_bonobo_unregister_activation_shortcut (NAUTILUS_LIST_VIEW_IID);
nautilus_bonobo_unregister_activation_shortcut (SEARCH_LIST_VIEW_IID);
nautilus_bookmarks_exiting ();
bonobo_object_unref (application->undo_manager);

View file

@ -1364,7 +1364,8 @@ nautilus_navigation_window_hide_sidebar (NautilusNavigationWindow *window)
nautilus_navigation_window_tear_down_sidebar (window);
nautilus_navigation_window_update_show_hide_menu_items (window);
if (eel_preferences_key_is_writable (NAUTILUS_PREFERENCES_START_WITH_SIDEBAR)) {
if (eel_preferences_key_is_writable (NAUTILUS_PREFERENCES_START_WITH_SIDEBAR) &&
eel_preferences_get_boolean (NAUTILUS_PREFERENCES_START_WITH_SIDEBAR)) {
eel_preferences_set_boolean (NAUTILUS_PREFERENCES_START_WITH_SIDEBAR, FALSE);
}
}
@ -1378,7 +1379,8 @@ nautilus_navigation_window_show_sidebar (NautilusNavigationWindow *window)
nautilus_navigation_window_set_up_sidebar (window);
nautilus_navigation_window_update_show_hide_menu_items (window);
if (eel_preferences_key_is_writable (NAUTILUS_PREFERENCES_START_WITH_SIDEBAR)) {
if (eel_preferences_key_is_writable (NAUTILUS_PREFERENCES_START_WITH_SIDEBAR) &&
!eel_preferences_get_boolean (NAUTILUS_PREFERENCES_START_WITH_SIDEBAR)) {
eel_preferences_set_boolean (NAUTILUS_PREFERENCES_START_WITH_SIDEBAR, TRUE);
}
}