[gnome-bluetooth] settings-row: Fix showing the confirm dialog when removing device
- From: Bastien Nocera <hadess src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-bluetooth] settings-row: Fix showing the confirm dialog when removing device
- Date: Wed, 16 Feb 2022 11:32:05 +0000 (UTC)
commit 1c8b342304cde5855ae1103df9b7d465faf8afeb
Author: Jonas Dreßler <verdre v0yd nl>
Date: Tue Feb 15 21:26:22 2022 +0100
settings-row: Fix showing the confirm dialog when removing device
With gtk4 the widget also has to be shown now, so do that.
While at it also make the dialog GTK_DIALOG_DESTROY_WITH_PARENT so it
gets destroyed when the parent window closes, and get rid of the
GMainLoop that made show_confirm_dialog() behave like a synchronous
function.
lib/bluetooth-settings-widget.c | 84 ++++++++++++++++++-----------------------
1 file changed, 37 insertions(+), 47 deletions(-)
---
diff --git a/lib/bluetooth-settings-widget.c b/lib/bluetooth-settings-widget.c
index c75759cf..3fd3b251 100644
--- a/lib/bluetooth-settings-widget.c
+++ b/lib/bluetooth-settings-widget.c
@@ -1248,50 +1248,6 @@ name_changed (BluetoothClient *client,
update_visibility (self);
}
-static void
-confirm_dialog_response_cb (GtkDialog *dialog,
- gint response,
- gpointer user_data)
-{
- GMainLoop *mainloop = g_object_get_data (G_OBJECT (dialog), "mainloop");
- int *out_response = user_data;
-
- *out_response = response;
-
- g_main_loop_quit (mainloop);
-}
-
-static gboolean
-show_confirm_dialog (BluetoothSettingsWidget *self,
- const char *name)
-{
- g_autoptr(GMainLoop) mainloop = NULL;
- GtkWidget *dialog;
- gint response;
-
- dialog = gtk_message_dialog_new (GTK_WINDOW (self->properties_dialog), GTK_DIALOG_MODAL,
- GTK_MESSAGE_QUESTION, GTK_BUTTONS_NONE,
- _("Remove “%s” from the list of devices?"), name);
- g_object_set (G_OBJECT (dialog), "secondary-text",
- _("If you remove the device, you will have to set it up again before next use."),
- NULL);
-
- gtk_dialog_add_button (GTK_DIALOG (dialog), _("_Cancel"), GTK_RESPONSE_CANCEL);
- gtk_dialog_add_button (GTK_DIALOG (dialog), _("_Remove"), GTK_RESPONSE_ACCEPT);
-
- mainloop = g_main_loop_new (NULL, FALSE);
- g_object_set_data (G_OBJECT (dialog), "mainloop", mainloop);
- g_signal_connect (dialog, "response", G_CALLBACK (confirm_dialog_response_cb), &response);
-
- g_main_loop_run (mainloop);
-
- gtk_window_destroy (GTK_WINDOW (dialog));
-
- if (response == GTK_RESPONSE_ACCEPT)
- return TRUE;
-
- return FALSE;
-}
static gboolean
remove_selected_device (BluetoothSettingsWidget *self)
@@ -1331,13 +1287,47 @@ remove_selected_device (BluetoothSettingsWidget *self)
}
static void
-delete_clicked (GtkButton *button,
- BluetoothSettingsWidget *self)
+confirm_dialog_response_cb (GtkDialog *dialog,
+ gint response,
+ gpointer user_data)
{
- if (show_confirm_dialog (self, self->selected_name) != FALSE) {
+ BluetoothSettingsWidget *self = user_data;
+
+ if (response == GTK_RESPONSE_ACCEPT) {
remove_selected_device (self);
gtk_widget_hide (GTK_WIDGET (self->properties_dialog));
}
+
+ gtk_window_destroy (GTK_WINDOW (dialog));
+}
+
+static void
+show_confirm_dialog (BluetoothSettingsWidget *self,
+ const char *name)
+{
+ GtkWidget *dialog;
+
+ dialog = gtk_message_dialog_new (GTK_WINDOW (self->properties_dialog),
+ GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT,
+ GTK_MESSAGE_QUESTION, GTK_BUTTONS_NONE,
+ _("Remove “%s” from the list of devices?"), name);
+ g_object_set (G_OBJECT (dialog), "secondary-text",
+ _("If you remove the device, you will have to set it up again before next use."),
+ NULL);
+
+ gtk_dialog_add_button (GTK_DIALOG (dialog), _("_Cancel"), GTK_RESPONSE_CANCEL);
+ gtk_dialog_add_button (GTK_DIALOG (dialog), _("_Remove"), GTK_RESPONSE_ACCEPT);
+
+ g_signal_connect (dialog, "response", G_CALLBACK (confirm_dialog_response_cb), self);
+
+ gtk_widget_show (dialog);
+}
+
+static void
+delete_clicked (GtkButton *button,
+ BluetoothSettingsWidget *self)
+{
+ show_confirm_dialog (self, self->selected_name);
}
static void
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]