Skip to content

Commit d5ba3ab

Browse files
committed
editor: rework the response handling of the advanced dialog
This utilizes the actions and the response callback to deal with the dialog response and differentate between a positive and a negative response. It also switches to using the HeaderBar, because that's looks better and works better with Gtk4.
1 parent 82ad407 commit d5ba3ab

File tree

2 files changed

+79
-33
lines changed

2 files changed

+79
-33
lines changed

properties/nm-libreswan-dialog.ui

Lines changed: 52 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -464,26 +464,15 @@
464464
<property name="can_focus">False</property>
465465
<property name="layout_style">end</property>
466466
<child>
467-
<object class="GtkButton" id="apply_button">
468-
<property name="label">gtk-apply</property>
469-
<property name="use_action_appearance">False</property>
470-
<property name="visible">True</property>
471-
<property name="can_focus">True</property>
472-
<property name="receives_default">True</property>
473-
<property name="margin_top">10</property>
474-
<property name="use_stock">True</property>
475-
</object>
476-
<packing>
477-
<property name="expand">False</property>
478-
<property name="fill">False</property>
479-
<property name="position">1</property>
480-
</packing>
467+
<placeholder/>
468+
</child>
469+
<child>
470+
<placeholder/>
481471
</child>
482472
</object>
483473
<packing>
484474
<property name="expand">False</property>
485-
<property name="fill">True</property>
486-
<property name="pack_type">end</property>
475+
<property name="fill">False</property>
487476
<property name="position">0</property>
488477
</packing>
489478
</child>
@@ -885,5 +874,52 @@ config: narrowing &lt;yes/no&gt;</property>
885874
</child>
886875
</object>
887876
</child>
877+
<action-widgets>
878+
<action-widget response="-6">cancel_button</action-widget>
879+
<action-widget response="-10">apply_button</action-widget>
880+
</action-widgets>
881+
<child type="titlebar">
882+
<object class="GtkHeaderBar">
883+
<property name="visible">True</property>
884+
<property name="can-focus">False</property>
885+
<property name="show-close-button">False</property>
886+
<child type="title">
887+
<object class="GtkLabel">
888+
<property name="visible">True</property>
889+
<property name="can-focus">False</property>
890+
<property name="label" translatable="yes">Advanced Properties</property>
891+
<style>
892+
<class name="title"/>
893+
</style>
894+
</object>
895+
</child>
896+
<child>
897+
<object class="GtkButton" id="cancel_button">
898+
<property name="label" translatable="yes">_Cancel</property>
899+
<property name="visible">True</property>
900+
<property name="can-focus">True</property>
901+
<property name="receives-default">True</property>
902+
<property name="use-underline">True</property>
903+
</object>
904+
</child>
905+
<child>
906+
<object class="GtkButton" id="apply_button">
907+
<property name="label" translatable="yes">_Apply</property>
908+
<property name="visible">True</property>
909+
<property name="can-focus">True</property>
910+
<property name="receives-default">True</property>
911+
<property name="use-underline">True</property>
912+
<style>
913+
<class name="default"/>
914+
<class name="suggested-action"/>
915+
</style>
916+
</object>
917+
<packing>
918+
<property name="pack-type">end</property>
919+
<property name="position">1</property>
920+
</packing>
921+
</child>
922+
</object>
923+
</child>
888924
</object>
889925
</interface>

properties/nm-libreswan-editor.c

Lines changed: 27 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -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

268281
static 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

Comments
 (0)