@@ -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