Skip to content

Commit

Permalink
FirewallPanel: handle locking internally (#169)
Browse files Browse the repository at this point in the history
  • Loading branch information
danirabbit authored Jan 6, 2024
1 parent 3022152 commit b2ad3c1
Show file tree
Hide file tree
Showing 2 changed files with 34 additions and 53 deletions.
37 changes: 2 additions & 35 deletions src/Plug.vala
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,6 @@
*/

public class SecurityPrivacy.Plug : Switchboard.Plug {
private Polkit.Permission permission;
private Gtk.Paned paned;
private Gtk.Stack stack;

Expand Down Expand Up @@ -42,29 +41,9 @@ public class SecurityPrivacy.Plug : Switchboard.Plug {

public override Gtk.Widget get_widget () {
if (paned == null) {
try {
permission = new Polkit.Permission.sync (
"io.elementary.switchboard.security-privacy",
new Polkit.UnixProcess (Posix.getpid ())
);
} catch (Error e) {
critical (e.message);
}

var label = new Gtk.Label (_("Some settings require administrator rights to be changed"));

var lock_button = new Gtk.LockButton (permission);

var infobar = new Gtk.InfoBar () {
message_type = INFO,
revealed = false
};
infobar.get_content_area ().add (label);
infobar.get_action_area ().add (lock_button);

var tracking = new TrackPanel ();
var locking = new LockPanel ();
var firewall = new FirewallPanel (permission);
var firewall = new FirewallPanel ();
var housekeeping = new HouseKeepingPanel ();
var location = new LocationPanel ();

Expand All @@ -75,24 +54,12 @@ public class SecurityPrivacy.Plug : Switchboard.Plug {
stack.add_titled (housekeeping, HOUSEKEEPING, _("Housekeeping"));
stack.add_titled (location, LOCATION, _("Location Services"));

var box = new Gtk.Box (VERTICAL, 0);
box.add (infobar);
box.add (stack);

var settings_sidebar = new Granite.SettingsSidebar (stack);

paned = new Gtk.Paned (HORIZONTAL);
paned.add1 (settings_sidebar);
paned.add2 (box);
paned.add2 (stack);
paned.show_all ();

stack.notify["visible-child"].connect (() => {
infobar.revealed = stack.visible_child == firewall && !permission.allowed;
});

permission.notify["allowed"].connect (() => {
infobar.revealed = stack.visible_child == firewall && !permission.allowed;
});
}

return paned;
Expand Down
50 changes: 32 additions & 18 deletions src/Views/FirewallPanel.vala
Original file line number Diff line number Diff line change
Expand Up @@ -21,14 +21,14 @@
*/

public class SecurityPrivacy.FirewallPanel : Granite.SimpleSettingsPage {
public Polkit.Permission permission { get; construct; }

private Gtk.Frame frame;
private Gtk.ListStore list_store;
private Gtk.TreeView view;
private bool loading = false;
private Gtk.Button remove_button;
private Settings settings;
private Gee.HashMap<string, UFWHelpers.Rule> disabled_rules;
private Polkit.Permission permission;

private enum Columns {
ACTION,
Expand All @@ -42,12 +42,11 @@ public class SecurityPrivacy.FirewallPanel : Granite.SimpleSettingsPage {
N_COLUMNS
}

public FirewallPanel (Polkit.Permission permission) {
public FirewallPanel () {
Object (
activatable: true,
icon_name: "network-firewall",
title: _("Firewall"),
permission: permission
title: _("Firewall")
);
}

Expand All @@ -65,18 +64,32 @@ public class SecurityPrivacy.FirewallPanel : Granite.SimpleSettingsPage {

create_treeview ();

sensitive = false;
try {
permission = new Polkit.Permission.sync (
"io.elementary.switchboard.security-privacy",
new Polkit.UnixProcess (Posix.getpid ())
);

permission.notify["allowed"].connect (() => {
loading = true;
sensitive = permission.allowed;
status_switch.active = UFWHelpers.get_status ();
list_store.clear ();
remove_button.sensitive = false;
var lock_button = new Gtk.LockButton (permission);

loading = false;
update_status ();
});
action_area.add (lock_button);

status_switch.sensitive = permission.allowed;

permission.notify["allowed"].connect (() => {
if (permission.allowed) {
loading = true;
status_switch.active = UFWHelpers.get_status ();
remove_button.sensitive = false;
loading = false;
}

status_switch.sensitive = permission.allowed;
frame.sensitive = status_switch.active && permission.allowed;
});
} catch (Error e) {
critical (e.message);
}
}

private void load_disabled_rules () {
Expand Down Expand Up @@ -336,8 +349,9 @@ public class SecurityPrivacy.FirewallPanel : Granite.SimpleSettingsPage {
view_box.add (scrolled);
view_box.add (actionbar);

var frame = new Gtk.Frame (null) {
child = view_box
frame = new Gtk.Frame (null) {
child = view_box,
sensitive = status_switch.active && permission.allowed
};

content_area.attach (frame, 0, 0);
Expand Down Expand Up @@ -503,7 +517,7 @@ public class SecurityPrivacy.FirewallPanel : Granite.SimpleSettingsPage {
}

private void update_status () {
view.sensitive = status_switch.active;
frame.sensitive = status_switch.active && permission.allowed;

if (status_switch.active) {
status_type = Granite.SettingsPage.StatusType.SUCCESS;
Expand Down

0 comments on commit b2ad3c1

Please sign in to comment.