diff options
author | Patrick Griffis <tingping@tingping.se> | 2022-04-16 18:41:34 -0500 |
---|---|---|
committer | Patrick Griffis <tingping@tingping.se> | 2022-04-16 18:41:34 -0500 |
commit | 13b6a40b9c3d1f2215ff87cdaff9e38a4020ee92 (patch) | |
tree | 29b3d01d4be5596c2aa2c5321ca21bbf3557ae10 /src/fe-gtk/gtkutil.c | |
parent | dd167b4c8393677f465c03d66b438d519c43fb87 (diff) |
Change preferences sub-dialogs to be modal
This solves the issue where the parent dialog is closed and then the child dialog is used. This is however only a partial fix: - Many other dialogs throughout the codebase do not currently have parent windows and need to be refactored. - Not all window managers respect modal so users can still trigger bugs. We can be more defensive against this but it requires more refactoring. Closes #2686
Diffstat (limited to 'src/fe-gtk/gtkutil.c')
-rw-r--r-- | src/fe-gtk/gtkutil.c | 12 |
1 files changed, 11 insertions, 1 deletions
diff --git a/src/fe-gtk/gtkutil.c b/src/fe-gtk/gtkutil.c index 674ad4fc..98a971f9 100644 --- a/src/fe-gtk/gtkutil.c +++ b/src/fe-gtk/gtkutil.c @@ -190,7 +190,7 @@ gtkutil_file_req_response (GtkWidget *dialog, gint res, struct file_req *freq) } void -gtkutil_file_req (const char *title, void *callback, void *userdata, char *filter, char *extensions, +gtkutil_file_req (GtkWindow *parent, const char *title, void *callback, void *userdata, char *filter, char *extensions, int flags) { struct file_req *freq; @@ -269,6 +269,16 @@ gtkutil_file_req (const char *title, void *callback, void *userdata, char *filte G_CALLBACK (gtkutil_file_req_response), freq); g_signal_connect (G_OBJECT (dialog), "destroy", G_CALLBACK (gtkutil_file_req_destroy), (gpointer) freq); + + if (parent) + gtk_window_set_transient_for (GTK_WINDOW (dialog), parent); + + if (flags & FRF_MODAL) + { + g_assert (parent); + gtk_window_set_modal (GTK_WINDOW (dialog), TRUE); + } + gtk_widget_show (dialog); } |