Skip to content

Commit 0b493a9

Browse files
committed
VPnMenuItem: use SettingsToggle
1 parent 9c4de5a commit 0b493a9

1 file changed

Lines changed: 36 additions & 40 deletions

File tree

src/Widgets/VpnMenuItem.vala

Lines changed: 36 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -36,53 +36,47 @@ public class Network.VpnMenuItem : Gtk.FlowBoxChild {
3636
_vpn_connection = null;
3737
}
3838

39-
((Gtk.Image) toggle_button.image).icon_name = "panel-network-vpn-disconnected-symbolic";
40-
toggle_button.active = false;
39+
toggle_button.icon_name = "panel-network-vpn-disconnected-symbolic";
40+
toggle_action.set_state (new Variant.boolean (false));
4141
}
4242
}
4343

44-
private Gtk.ToggleButton toggle_button;
44+
private SettingsToggle toggle_button;
45+
private SimpleAction toggle_action;
4546

4647
public VpnMenuItem (NM.RemoteConnection remote_connection) {
4748
Object (remote_connection: remote_connection);
4849
}
4950

5051
construct {
51-
toggle_button = new Gtk.ToggleButton () {
52-
halign = Gtk.Align.CENTER,
53-
image = new Gtk.Image.from_icon_name ("panel-network-vpn-disconnected-symbolic", Gtk.IconSize.MENU)
52+
toggle_button = new SettingsToggle () {
53+
action_name = "vpn.toggle",
54+
hexpand = true,
55+
icon_name = "panel-network-vpn-disconnected-symbolic",
56+
settings_uri = "settings://network/vpn",
57+
text = remote_connection.get_id ()
5458
};
5559

56-
var label = new Gtk.Label (remote_connection.get_id ()) {
57-
ellipsize = Pango.EllipsizeMode.MIDDLE,
58-
max_width_chars = 16
59-
};
60-
label.get_style_context ().add_class (Granite.STYLE_CLASS_SMALL_LABEL);
60+
can_focus = false;
61+
child = toggle_button;
6162

62-
var box = new Gtk.Box (Gtk.Orientation.VERTICAL, 3) {
63-
hexpand = true
64-
};
65-
box.add (toggle_button);
66-
box.add (label);
63+
toggle_action = new SimpleAction.stateful ("toggle", null, new Variant.boolean (false));
64+
toggle_action.activate.connect (() => activate ());
6765

68-
can_focus = false;
69-
add (box);
66+
var action_group = new SimpleActionGroup ();
67+
action_group.add_action (toggle_action);
7068

71-
// We can't use clicked because we get in a weird loop state
72-
toggle_button.button_release_event.connect ((b, ev) => {
73-
activate ();
74-
return Gdk.EVENT_STOP;
75-
});
69+
insert_action_group ("vpn", action_group);
7670

7771
remote_connection.changed.connect (() => {
78-
label.label = remote_connection.get_id ();
72+
toggle_button.text = remote_connection.get_id ();
7973
});
8074
}
8175

8276
private void update_state () {
8377
if (_vpn_connection == null) {
84-
((Gtk.Image) toggle_button.image).icon_name = "panel-network-vpn-disconnected-symbolic";
85-
toggle_button.active = false;
78+
toggle_button.icon_name = "panel-network-vpn-disconnected-symbolic";
79+
toggle_action.set_state (new Variant.boolean (false));
8680
return;
8781
}
8882
unowned string connection_type = _vpn_connection.get_connection_type ();
@@ -92,39 +86,41 @@ public class Network.VpnMenuItem : Gtk.FlowBoxChild {
9286
case NM.VpnConnectionState.IP_CONFIG_GET:
9387
case NM.VpnConnectionState.NEED_AUTH:
9488
case NM.VpnConnectionState.PREPARE:
95-
((Gtk.Image) toggle_button.image).icon_name = "panel-network-vpn-acquiring-symbolic";
89+
toggle_button.icon_name = "panel-network-vpn-acquiring-symbolic";
90+
toggle_action.set_state (new Variant.boolean (true));
9691
break;
9792
case NM.VpnConnectionState.ACTIVATED:
98-
((Gtk.Image) toggle_button.image).icon_name = "panel-network-vpn-connected-symbolic";
99-
toggle_button.active = true;
93+
toggle_button.icon_name = "panel-network-vpn-connected-symbolic";
94+
toggle_action.set_state (new Variant.boolean (true));
10095
break;
10196
case NM.VpnConnectionState.DISCONNECTED:
102-
((Gtk.Image) toggle_button.image).icon_name = "panel-network-vpn-disconnected-symbolic";
103-
toggle_button.active = false;
97+
toggle_button.icon_name = "panel-network-vpn-disconnected-symbolic";
98+
toggle_action.set_state (new Variant.boolean (false));
10499
break;
105100
case NM.VpnConnectionState.FAILED:
106101
case NM.VpnConnectionState.UNKNOWN:
107-
((Gtk.Image) toggle_button.image).icon_name = "panel-network-vpn-error-symbolic";
108-
toggle_button.active = false;
102+
toggle_button.icon_name = "panel-network-vpn-error-symbolic";
103+
toggle_action.set_state (new Variant.boolean (false));
109104
break;
110105
}
111106
} else if (connection_type == NM.SettingWireGuard.SETTING_NAME) {
112107
switch (_vpn_connection.get_state ()) {
113108
case NM.ActiveConnectionState.UNKNOWN:
114-
((Gtk.Image) toggle_button.image).icon_name = "panel-network-vpn-error-symbolic";
115-
toggle_button.active = false;
109+
toggle_button.icon_name = "panel-network-vpn-error-symbolic";
110+
toggle_action.set_state (new Variant.boolean (false));
116111
break;
117112
case NM.ActiveConnectionState.DEACTIVATED:
118113
case NM.ActiveConnectionState.DEACTIVATING:
119-
((Gtk.Image) toggle_button.image).icon_name = "panel-network-vpn-disconnected-symbolic";
120-
toggle_button.active = false;
114+
toggle_button.icon_name = "panel-network-vpn-disconnected-symbolic";
115+
toggle_action.set_state (new Variant.boolean (false));
121116
break;
122117
case NM.ActiveConnectionState.ACTIVATING:
123-
((Gtk.Image) toggle_button.image).icon_name = "panel-network-vpn-acquiring-symbolic";
118+
toggle_button.icon_name = "panel-network-vpn-acquiring-symbolic";
119+
toggle_action.set_state (new Variant.boolean (true));
124120
break;
125121
case NM.ActiveConnectionState.ACTIVATED:
126-
((Gtk.Image) toggle_button.image).icon_name = "panel-network-vpn-connected-symbolic";
127-
toggle_button.active = true;
122+
toggle_button.icon_name = "panel-network-vpn-connected-symbolic";
123+
toggle_action.set_state (new Variant.boolean (true));
128124
break;
129125
}
130126
}

0 commit comments

Comments
 (0)