diff options
author | Federico Mena Quintero <federico@novell.com> | 2006-03-20 18:40:38 +0000 |
---|---|---|
committer | Federico Mena Quintero <federico@src.gnome.org> | 2006-03-20 18:40:38 +0000 |
commit | ceea7a034d7f920fc2edbbd22da63ae48f72dfb6 (patch) | |
tree | d15a1519f5fe27ac5c69031f3e169076a381e5c7 | |
parent | bb783d13807c40414ecb396b12573466d5e84fc5 (diff) | |
download | nautilus-ceea7a034d7f920fc2edbbd22da63ae48f72dfb6.tar.gz |
Don't set the visibility of the "burn CD" action here.
2006-03-14 Federico Mena Quintero <federico@novell.com>
* src/nautilus-window-menus.c: (nautilus_window_initialize_menus):
Don't set the visibility of the "burn CD" action here.
(nautilus_window_initialize_menus_constructed): New public
function. Only disable NAUTILUS_ACTION_GO_TO_BURN_CD if we are in
a window which has a menubar. This prevents calling
have_burn_uri() unnecessarily for the desktop window, as this is
an expensive operation during login (up to 1 second!). The way
have_burn_uri() works is by creating a "burn:///" URI and seeing
if it is valid, but this makes gnome-vfs load libmapping.so from
nautilus-cd-burner; this takes a long time during login.
* src/nautilus-window-private.h: Added prototype for
nautilus_window_initialize_menus_constructed().
* src/nautilus-window.h: New prototype for
nautilus_window_has_menubar_and_statusbar().
* src/nautilus-window.c
(nautilus_window_has_menubar_and_statusbar): New function; returns
whether the window should have a menubar and statusbar. This
depends on the window_type from the class structure.
(nautilus_window_constructor): Call
nautilus_window_initialize_menus_constructed(). We do it here so
that its own call to nautilus_window_has_menubar_and_statusbar()
will already have the right value for class->window_type.
-rw-r--r-- | ChangeLog | 28 | ||||
-rw-r--r-- | src/nautilus-window-menus.c | 21 | ||||
-rw-r--r-- | src/nautilus-window-private.h | 1 | ||||
-rw-r--r-- | src/nautilus-window.c | 39 | ||||
-rw-r--r-- | src/nautilus-window.h | 1 |
5 files changed, 83 insertions, 7 deletions
@@ -1,3 +1,31 @@ +2006-03-14 Federico Mena Quintero <federico@novell.com> + + * src/nautilus-window-menus.c: (nautilus_window_initialize_menus): + Don't set the visibility of the "burn CD" action here. + (nautilus_window_initialize_menus_constructed): New public + function. Only disable NAUTILUS_ACTION_GO_TO_BURN_CD if we are in + a window which has a menubar. This prevents calling + have_burn_uri() unnecessarily for the desktop window, as this is + an expensive operation during login (up to 1 second!). The way + have_burn_uri() works is by creating a "burn:///" URI and seeing + if it is valid, but this makes gnome-vfs load libmapping.so from + nautilus-cd-burner; this takes a long time during login. + + * src/nautilus-window-private.h: Added prototype for + nautilus_window_initialize_menus_constructed(). + + * src/nautilus-window.h: New prototype for + nautilus_window_has_menubar_and_statusbar(). + + * src/nautilus-window.c + (nautilus_window_has_menubar_and_statusbar): New function; returns + whether the window should have a menubar and statusbar. This + depends on the window_type from the class structure. + (nautilus_window_constructor): Call + nautilus_window_initialize_menus_constructed(). We do it here so + that its own call to nautilus_window_has_menubar_and_statusbar() + will already have the right value for class->window_type. + 2006-03-19 Christian Neumair <chris@gnome-de.org> * src/nautilus-main.c: (register_icons): diff --git a/src/nautilus-window-menus.c b/src/nautilus-window-menus.c index 9459f4764..f5f94d59b 100644 --- a/src/nautilus-window-menus.c +++ b/src/nautilus-window-menus.c @@ -744,14 +744,25 @@ nautilus_window_initialize_menus (NautilusWindow *window) ui = nautilus_ui_string_get ("nautilus-shell-ui.xml"); gtk_ui_manager_add_ui_from_string (ui_manager, ui, -1, NULL); - if (!have_burn_uri ()) { - action = gtk_action_group_get_action (action_group, NAUTILUS_ACTION_GO_TO_BURN_CD); - gtk_action_set_visible (action, FALSE); - } - nautilus_window_initialize_bookmarks_menu (window); } +void +nautilus_window_initialize_menus_constructed (NautilusWindow *window) +{ + GtkAction *action; + + /* Don't call have_burn_uri() for the desktop window, as this is a very + * expensive operation during login (around 1 second) --- + * have_burn_uri() has to create a "burn:///" URI, which causes + * gnome-vfs to link in libmapping.so from nautilus-cd-burner. + */ + if (nautilus_window_has_menubar_and_statusbar (window) && !have_burn_uri ()) { + action = gtk_action_group_get_action (window->details->main_action_group, NAUTILUS_ACTION_GO_TO_BURN_CD); + gtk_action_set_visible (action, FALSE); + } +} + static GList * get_extension_menus (NautilusWindow *window) { diff --git a/src/nautilus-window-private.h b/src/nautilus-window-private.h index 5b51a925c..9805aa9e3 100644 --- a/src/nautilus-window-private.h +++ b/src/nautilus-window-private.h @@ -176,6 +176,7 @@ void nautilus_window_set_status (Nautil void nautilus_window_load_view_as_menus (NautilusWindow *window); void nautilus_window_load_extension_menus (NautilusWindow *window); void nautilus_window_initialize_menus (NautilusWindow *window); +void nautilus_window_initialize_menus_constructed (NautilusWindow *window); void nautilus_menus_append_bookmark_to_menu (NautilusWindow *window, NautilusBookmark *bookmark, const char *parent_path, diff --git a/src/nautilus-window.c b/src/nautilus-window.c index 16ec1560c..e6a589cab 100644 --- a/src/nautilus-window.c +++ b/src/nautilus-window.c @@ -159,7 +159,6 @@ nautilus_window_init (NautilusWindow *window) gtk_widget_show (table); gtk_container_add (GTK_CONTAINER (window), table); - statusbar = gtk_statusbar_new (); window->details->statusbar = statusbar; gtk_table_attach (GTK_TABLE (table), @@ -642,6 +641,25 @@ nautilus_window_finalize (GObject *object) G_OBJECT_CLASS (nautilus_window_parent_class)->finalize (object); } +static GObject * +nautilus_window_constructor (GType type, + guint n_construct_properties, + GObjectConstructParam *construct_params) +{ + GObject *object; + NautilusWindow *window; + + object = (* G_OBJECT_CLASS (nautilus_window_parent_class)->constructor) (type, + n_construct_properties, + construct_params); + + window = NAUTILUS_WINDOW (object); + + nautilus_window_initialize_menus_constructed (window); + + return object; +} + void nautilus_window_show_window (NautilusWindow *window) { @@ -1532,8 +1550,9 @@ static void nautilus_window_class_init (NautilusWindowClass *class) { GtkBindingSet *binding_set; - + G_OBJECT_CLASS (class)->finalize = nautilus_window_finalize; + G_OBJECT_CLASS (class)->constructor = nautilus_window_constructor; G_OBJECT_CLASS (class)->get_property = nautilus_window_get_property; G_OBJECT_CLASS (class)->set_property = nautilus_window_set_property; GTK_OBJECT_CLASS (class)->destroy = nautilus_window_destroy; @@ -1603,3 +1622,19 @@ nautilus_window_class_init (NautilusWindowClass *class) " widget \"*.nautilus-extra-view-widget\" style:rc \"nautilus-extra-view-widgets-style-internal\" \n" "\n"); } + +/** + * nautilus_window_has_menubar_and_statusbar: + * @window: A #NautilusWindow + * + * Queries whether the window should have a menubar and statusbar, based on the + * window_type from its class structure. + * + * Return value: TRUE if the window should have a menubar and statusbar; FALSE + * otherwise. + **/ +gboolean +nautilus_window_has_menubar_and_statusbar (NautilusWindow *window) +{ + return (nautilus_window_get_window_type (window) != NAUTILUS_WINDOW_DESKTOP); +} diff --git a/src/nautilus-window.h b/src/nautilus-window.h index 1eb2f9086..1d2f0bd55 100644 --- a/src/nautilus-window.h +++ b/src/nautilus-window.h @@ -150,5 +150,6 @@ void nautilus_window_allow_burn_cd (NautilusWindow *window GtkUIManager * nautilus_window_get_ui_manager (NautilusWindow *window); void nautilus_window_add_extra_location_widget (NautilusWindow *window, GtkWidget *widget); +gboolean nautilus_window_has_menubar_and_statusbar (NautilusWindow *window); #endif |