@@ -255,14 +255,27 @@ advanced_button_clicked_cb (GtkWidget *button, gpointer user_data)
255255 LibreswanEditorPrivate * priv = LIBRESWAN_EDITOR_GET_PRIVATE (user_data );
256256 GtkWidget * toplevel ;
257257
258- if (gtk_widget_get_visible (priv -> advanced_dialog ))
259- gtk_widget_hide (priv -> advanced_dialog );
260- else {
261- toplevel = gtk_widget_get_toplevel (priv -> widget );
262- if (gtk_widget_is_toplevel (toplevel ))
263- gtk_window_set_transient_for (GTK_WINDOW (priv -> advanced_dialog ), GTK_WINDOW (toplevel ));
264- gtk_widget_show_all (priv -> advanced_dialog );
265- }
258+ toplevel = gtk_widget_get_toplevel (priv -> widget );
259+ if (gtk_widget_is_toplevel (toplevel ))
260+ gtk_window_set_transient_for (GTK_WINDOW (priv -> advanced_dialog ), GTK_WINDOW (toplevel ));
261+ gtk_widget_show_all (priv -> advanced_dialog );
262+ }
263+
264+ static void update_adv_settings (LibreswanEditor * self , NMSettingVpn * s_vpn );
265+ static void populate_adv_dialog (LibreswanEditor * self );
266+
267+ static void
268+ advanced_dialog_response_cb (GtkWidget * dialog , gint response , gpointer user_data )
269+ {
270+ LibreswanEditor * self = LIBRESWAN_EDITOR (user_data );
271+ LibreswanEditorPrivate * priv = LIBRESWAN_EDITOR_GET_PRIVATE (self );
272+
273+ gtk_widget_hide (priv -> advanced_dialog );
274+
275+ if (response == GTK_RESPONSE_APPLY )
276+ update_adv_settings (self , priv -> s_vpn );
277+ else
278+ populate_adv_dialog (self );
266279}
267280
268281static GObject *
@@ -451,11 +464,10 @@ init_editor_plugin (LibreswanEditor *self,
451464 g_signal_connect (G_OBJECT (priv -> advanced_dialog ), "delete-event" ,
452465 G_CALLBACK (gtk_widget_hide_on_delete ), self );
453466
454- widget = GTK_WIDGET (gtk_builder_get_object (priv -> builder , "advanced_button" ));
455- g_return_val_if_fail (widget != NULL , FALSE);
456- g_signal_connect (G_OBJECT (widget ), "clicked" , G_CALLBACK (advanced_button_clicked_cb ), self );
467+ g_signal_connect (G_OBJECT (priv -> advanced_dialog ), "response" ,
468+ G_CALLBACK (advanced_dialog_response_cb ), self );
457469
458- widget = GTK_WIDGET (gtk_builder_get_object (priv -> builder , "apply_button " ));
470+ widget = GTK_WIDGET (gtk_builder_get_object (priv -> builder , "advanced_button " ));
459471 g_return_val_if_fail (widget != NULL , FALSE);
460472 g_signal_connect (G_OBJECT (widget ), "clicked" , G_CALLBACK (advanced_button_clicked_cb ), self );
461473
@@ -756,11 +768,9 @@ dispose (GObject *object)
756768 (GCallback ) password_storage_changed_cb ,
757769 plugin );
758770
759- if (priv -> widget )
760- g_object_unref (priv -> widget );
761-
762- if (priv -> builder )
763- g_object_unref (priv -> builder );
771+ g_clear_object (& priv -> widget );
772+ g_clear_object (& priv -> builder );
773+ g_clear_object (& priv -> s_vpn );
764774
765775 G_OBJECT_CLASS (libreswan_editor_parent_class )-> dispose (object );
766776}
0 commit comments