summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlexander Larsson <alexl@redhat.com>2004-11-22 14:15:11 +0000
committerAlexander Larsson <alexl@src.gnome.org>2004-11-22 14:15:11 +0000
commit0f31e824f2028f5c8991b66ab67bc69bfba15772 (patch)
tree0ff9a3848b22cb1c3458f176cb95c148d3044b9a
parentc476807d42acf3bda613c1e45ed0cbf8fd60aec8 (diff)
downloadnautilus-bonobo-slay-branch.tar.gz
Don't reenter action callback when switching views.bonobo-slay-branch
2004-11-22 Alexander Larsson <alexl@redhat.com> * src/nautilus-window.c: (action_view_as_callback), (nautilus_window_synch_view_as_menus): Don't reenter action callback when switching views.
-rw-r--r--ChangeLog6
-rw-r--r--src/nautilus-window.c33
2 files changed, 31 insertions, 8 deletions
diff --git a/ChangeLog b/ChangeLog
index f05ec6b23..d550e4263 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+2004-11-22 Alexander Larsson <alexl@redhat.com>
+
+ * src/nautilus-window.c: (action_view_as_callback),
+ (nautilus_window_synch_view_as_menus):
+ Don't reenter action callback when switching views.
+
2004-11-19 Dave Camp <dave@novell.com>
* src/file-manager/fm-directory-view.c: (reset_open_with_menu),
diff --git a/src/nautilus-window.c b/src/nautilus-window.c
index 96cc59b74..6cd1e8d77 100644
--- a/src/nautilus-window.c
+++ b/src/nautilus-window.c
@@ -108,8 +108,15 @@ enum {
static guint signals[LAST_SIGNAL] = { 0 };
-static void cancel_view_as_callback (NautilusWindow *window);
+typedef struct {
+ NautilusWindow *window;
+ char *id;
+} ActivateViewData;
+
+static void cancel_view_as_callback (NautilusWindow *window);
static void nautilus_window_info_iface_init (NautilusWindowInfoIface *iface);
+static void action_view_as_callback (GtkAction *action,
+ ActivateViewData *data);
static GList *history_list;
@@ -636,11 +643,6 @@ nautilus_window_size_request (GtkWidget *widget,
* Main API
*/
-typedef struct {
- NautilusWindow *window;
- char *id;
-} ActivateViewData;
-
static void
free_activate_view_data (gpointer data)
{
@@ -656,8 +658,10 @@ static void
action_view_as_callback (GtkAction *action,
ActivateViewData *data)
{
- nautilus_window_set_content_view (data->window,
- data->id);
+ if (gtk_toggle_action_get_active (GTK_TOGGLE_ACTION (action))) {
+ nautilus_window_set_content_view (data->window,
+ data->id);
+ }
}
static GtkRadioAction *
@@ -826,7 +830,20 @@ nautilus_window_synch_view_as_menus (NautilusWindow *window)
action_name);
g_free (action_name);
+ /* Don't trigger the action callback when we're synchronizing */
+ g_signal_handlers_block_matched (action,
+ G_SIGNAL_MATCH_FUNC,
+ 0, 0,
+ NULL,
+ action_view_as_callback,
+ NULL);
gtk_toggle_action_set_active (GTK_TOGGLE_ACTION (action), TRUE);
+ g_signal_handlers_unblock_matched (action,
+ G_SIGNAL_MATCH_FUNC,
+ 0, 0,
+ NULL,
+ action_view_as_callback,
+ NULL);
}
static void