summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFederico Mena Quintero <federico@novell.com>2006-03-20 18:40:38 +0000
committerFederico Mena Quintero <federico@src.gnome.org>2006-03-20 18:40:38 +0000
commitceea7a034d7f920fc2edbbd22da63ae48f72dfb6 (patch)
treed15a1519f5fe27ac5c69031f3e169076a381e5c7
parentbb783d13807c40414ecb396b12573466d5e84fc5 (diff)
downloadnautilus-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--ChangeLog28
-rw-r--r--src/nautilus-window-menus.c21
-rw-r--r--src/nautilus-window-private.h1
-rw-r--r--src/nautilus-window.c39
-rw-r--r--src/nautilus-window.h1
5 files changed, 83 insertions, 7 deletions
diff --git a/ChangeLog b/ChangeLog
index 6fbb84c41..f86d16504 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -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