From d8b71e035c1a20378706dc18e36aa54771251954 Mon Sep 17 00:00:00 2001 Message-Id: From: Mark Wooding Date: Wed, 25 Nov 2009 16:27:14 +0000 Subject: [PATCH] Make the properties window's progress window a transient of the right parent window, to avoid bizarre window reordering effects. Organization: Straylight/Edgeware From: Richard Kettlewell --- disobedience/choose-menu.c | 2 +- disobedience/disobedience.h | 6 ++++-- disobedience/progress.c | 8 +++++--- disobedience/properties.c | 7 +++++-- disobedience/queue-menu.c | 2 +- 5 files changed, 16 insertions(+), 9 deletions(-) diff --git a/disobedience/choose-menu.c b/disobedience/choose-menu.c index f1aa3b0..44ad04f 100644 --- a/disobedience/choose-menu.c +++ b/disobedience/choose-menu.c @@ -121,7 +121,7 @@ static void choose_properties_activate(GtkMenuItem attribute((unused)) *item, gtk_tree_selection_selected_foreach(choose_selection, choose_gather_selected_files_callback, v); - properties(v->nvec, (const char **)v->vec); + properties(v->nvec, (const char **)v->vec, toplevel); } /** @brief Set sensitivity for select children diff --git a/disobedience/disobedience.h b/disobedience/disobedience.h index 29a278e..001a0b0 100644 --- a/disobedience/disobedience.h +++ b/disobedience/disobedience.h @@ -119,7 +119,8 @@ void popup_protocol_error(int code, const char *msg); /* Report an error */ -void properties(int ntracks, const char **tracks); +void properties(int ntracks, const char **tracks, + GtkWidget *parent); /* Pop up a properties window for a list of tracks */ GtkWidget *scroll_widget(GtkWidget *child); @@ -136,7 +137,8 @@ void popup_submsg(GtkWidget *parent, GtkMessageType mt, const char *msg); void fpopup_msg(GtkMessageType mt, const char *fmt, ...); -struct progress_window *progress_window_new(const char *title); +struct progress_window *progress_window_new(const char *title, + GtkWidget *parent); /* Pop up a progress window */ void progress_window_progress(struct progress_window *pw, diff --git a/disobedience/progress.c b/disobedience/progress.c index 2e31603..33dbfc9 100644 --- a/disobedience/progress.c +++ b/disobedience/progress.c @@ -30,12 +30,14 @@ struct progress_window { }; /** @brief Create a progress window */ -struct progress_window *progress_window_new(const char *title) { +struct progress_window *progress_window_new(const char *title, + GtkWidget *parent) { struct progress_window *pw = xmalloc(sizeof *pw); pw->window = gtk_window_new(GTK_WINDOW_TOPLEVEL); - gtk_window_set_transient_for(GTK_WINDOW(pw->window), - GTK_WINDOW(toplevel)); + if(parent) + gtk_window_set_transient_for(GTK_WINDOW(pw->window), + GTK_WINDOW(parent)); g_signal_connect(pw->window, "destroy", G_CALLBACK(gtk_widget_destroyed), &pw->window); gtk_window_set_default_size(GTK_WINDOW(pw->window), 360, -1); diff --git a/disobedience/properties.c b/disobedience/properties.c index 62ea22f..092e8db 100644 --- a/disobedience/properties.c +++ b/disobedience/properties.c @@ -186,7 +186,8 @@ static gboolean properties_keypress(GtkWidget attribute((unused)) *widget, } } -void properties(int ntracks, const char **tracks) { +void properties(int ntracks, const char **tracks, + GtkWidget *parent) { int n, m; struct prefdata *f; GtkWidget *buttonbox, *vbox, *label, *entry, *propagate; @@ -299,7 +300,9 @@ void properties(int ntracks, const char **tracks) { if(pw) progress_window_progress(pw, 0, 0); /* Pop up a progress bar while we're waiting */ - pw = progress_window_new("Fetching Track Properties"); + while(parent->parent) + parent = parent->parent; + pw = progress_window_new("Fetching Track Properties", parent); } /* Everything is filled in now */ diff --git a/disobedience/queue-menu.c b/disobedience/queue-menu.c index beb40f5..ebf8555 100644 --- a/disobedience/queue-menu.c +++ b/disobedience/queue-menu.c @@ -71,7 +71,7 @@ void ql_properties_activate(GtkMenuItem attribute((unused)) *menuitem, gtk_tree_model_iter_next(GTK_TREE_MODEL(ql->store), iter); } if(v->nvec) - properties(v->nvec, (const char **)v->vec); + properties(v->nvec, (const char **)v->vec, ql->view); } /* Scratch */ -- [mdw]