malcontent-control: Move the app restrictions into a separate dialogue

Rather than having a scrollable listbox within a scrollable list of
widgets, move the listbox out to a separate dialogue.

This involves separating out all the code to query the apps, to get and
to set the app filter, from `MctUserControls` out into the new
`MctRestrictApplicationsSelector`. Most of it is unchanged, aside from
its interaction with the filter: the filter is now provided to the
widget by the calling code, rather than being queried by the widget
itself. The widget’s status can be queried into an
`MctAppFilterBuilder`, rather than being used to set the app filter
directly.

This commit redesigns the appearance of the relevant widgets in the main
window so that they follow the new list-box-like visual design. A
following commit will apply similar changes to the other widgest in the
main screen.

Signed-off-by: Philip Withnall <withnall@endlessm.com>
This commit is contained in:
Philip Withnall 2020-01-28 14:16:40 +00:00
parent 93d18ed2a9
commit bffab0942f
12 changed files with 1550 additions and 529 deletions

View file

@ -18,9 +18,6 @@
<attributes>
<attribute name="weight" value="bold" />
</attributes>
<accessibility>
<relation target="listbox" type="label-for"/>
</accessibility>
</object>
<packing>
<property name="top-attach">0</property>
@ -29,22 +26,187 @@
</child>
<child>
<object class="GtkLabel">
<object class="GtkFrame">
<property name="visible">True</property>
<property name="xalign">0.0</property>
<property name="label" translatable="yes">Prevent this user from opening some apps by turning them off below.</property>
<property name="wrap">True</property>
<property name="use-underline">True</property>
<property name="mnemonic-widget">listbox</property>
<attributes>
<attribute name="scale" value="0.83333" />
</attributes>
<accessibility>
<relation target="listbox" type="description-for"/>
</accessibility>
<style>
<class name="dim-label" />
</style>
<property name="can_focus">False</property>
<property name="hexpand">True</property>
<property name="label_xalign">0</property>
<property name="shadow_type">in</property>
<child>
<object class="GtkListBox">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="hexpand">True</property>
<property name="selection_mode">none</property>
<property name="activate_on_single_click">False</property>
<child>
<object class="GtkListBoxRow">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="activatable">False</property>
<property name="selectable">False</property>
<child>
<object class="GtkGrid">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="valign">center</property>
<property name="margin-left">12</property>
<property name="margin-right">12</property>
<property name="margin-top">8</property>
<property name="margin-bottom">8</property>
<property name="row-spacing">4</property>
<property name="column-spacing">4</property>
<child>
<object class="GtkLabel" id="allow_web_browsers_label">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="halign">start</property>
<property name="hexpand">True</property>
<property name="ellipsize">end</property>
<property name="xalign">0</property>
<property name="label" translatable="yes">Block _Web Browsers</property>
<property name="use_underline">True</property>
<property name="mnemonic_widget">allow_web_browsers_switch</property>
<accessibility>
<relation target="allow_web_browsers_switch" type="label-for"/>
</accessibility>
</object>
<packing>
<property name="left-attach">0</property>
<property name="top-attach">0</property>
</packing>
</child>
<child>
<object class="GtkLabel" id="allow_web_browsers_description">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="halign">start</property>
<property name="hexpand">True</property>
<property name="ellipsize">end</property>
<property name="xalign">0</property>
<property name="label" translatable="yes">Prevents the user from running web browsers, but limited web content may still be available in other applications</property>
<attributes>
<attribute name="scale" value="0.88"/>
</attributes>
<style>
<class name="dim-label" />
</style>
<accessibility>
<relation target="allow_web_browsers_switch" type="description-for"/>
</accessibility>
</object>
<packing>
<property name="left-attach">0</property>
<property name="top-attach">1</property>
</packing>
</child>
<child>
<object class="GtkSwitch" id="allow_web_browsers_switch">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="halign">end</property>
<property name="valign">center</property>
<signal name="notify::active" handler="on_allow_web_browsers_switch_active_changed_cb" object="MctUserControls" swapped="no" />
</object>
<packing>
<property name="left-attach">1</property>
<property name="top-attach">0</property>
<property name="height">2</property>
</packing>
</child>
</object>
</child>
</object>
</child>
<child>
<object class="GtkListBoxRow">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="activatable">False</property>
<property name="selectable">False</property>
<child>
<object class="GtkGrid">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="valign">center</property>
<property name="margin-left">12</property>
<property name="margin-right">12</property>
<property name="margin-top">8</property>
<property name="margin-bottom">8</property>
<property name="row-spacing">4</property>
<property name="column-spacing">4</property>
<child>
<object class="GtkLabel" id="restrict_applications_label">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="halign">start</property>
<property name="hexpand">True</property>
<property name="ellipsize">end</property>
<property name="xalign">0</property>
<property name="label" translatable="yes">_Restrict Applications</property>
<property name="use_underline">True</property>
<property name="mnemonic_widget">restrict_applications_button</property>
<accessibility>
<relation target="restrict_applications_button" type="label-for"/>
</accessibility>
</object>
<packing>
<property name="left-attach">0</property>
<property name="top-attach">0</property>
</packing>
</child>
<child>
<object class="GtkLabel" id="restrict_applications_description">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="halign">start</property>
<property name="hexpand">True</property>
<property name="ellipsize">end</property>
<property name="xalign">0</property>
<property name="label" translatable="yes">Prevents particular applications from being used</property>
<attributes>
<attribute name="scale" value="0.88"/>
</attributes>
<style>
<class name="dim-label" />
</style>
<accessibility>
<relation target="restrict_applications_button" type="description-for"/>
</accessibility>
</object>
<packing>
<property name="left-attach">0</property>
<property name="top-attach">1</property>
</packing>
</child>
<child>
<object class="GtkButton" id="restrict_applications_button">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="halign">end</property>
<property name="valign">center</property>
<property name="relief">none</property>
<signal name="clicked" handler="on_restrict_applications_button_clicked_cb" object="MctUserControls" swapped="no" />
<child>
<object class="GtkImage">
<property name="visible">True</property>
<property name="icon-name">pan-end-symbolic</property>
<property name="icon-size">4</property><!-- GTK_ICON_SIZE_BUTTON -->
</object>
</child>
</object>
<packing>
<property name="left-attach">1</property>
<property name="top-attach">0</property>
<property name="height">2</property>
</packing>
</child>
</object>
</child>
</object>
</child>
</object>
</child>
</object>
<packing>
<property name="top-attach">1</property>
@ -52,115 +214,6 @@
</packing>
</child>
<child>
<object class="GtkScrolledWindow">
<property name="visible">True</property>
<property name="hexpand">True</property>
<property name="hscrollbar-policy">never</property>
<property name="min-content-height">100</property>
<property name="max-content-height">400</property>
<property name="propagate-natural-height">True</property>
<property name="shadow-type">etched-in</property>
<!-- Restricted Apps Listbox -->
<child>
<object class="GtkListBox" id="listbox">
<property name="visible">True</property>
<property name="selection-mode">none</property>
</object>
</child>
</object>
<packing>
<property name="top-attach">2</property>
<property name="left-attach">0</property>
<property name="width">2</property>
</packing>
</child>
<!-- Restricted Web Browsers -->
<child>
<object class="GtkLabel">
<property name="visible">True</property>
<property name="xalign">0.0</property>
<property name="label" translatable="yes">Restrict Web Browsers</property>
<attributes>
<attribute name="weight" value="bold" />
</attributes>
<accessibility>
<relation target="allow_web_browsers_switch" type="label-for"/>
</accessibility>
</object>
<packing>
<property name="top-attach">3</property>
<property name="left-attach">0</property>
</packing>
</child>
<child>
<object class="GtkLabel">
<property name="visible">True</property>
<property name="xalign">0.0</property>
<property name="label" translatable="yes">Prevent this user from running web browsers by turning them off below. Note that if the computer is connected to the internet, limited web content may still be available in other applications.</property>
<property name="wrap">True</property>
<property name="max-width-chars">55</property>
<property name="use-underline">True</property>
<property name="mnemonic-widget">allow_web_browsers_switch</property>
<attributes>
<attribute name="scale" value="0.83333" />
</attributes>
<accessibility>
<relation target="allow_web_browsers_switch" type="description-for"/>
</accessibility>
<style>
<class name="dim-label" />
</style>
</object>
<packing>
<property name="top-attach">4</property>
<property name="left-attach">0</property>
</packing>
</child>
<child>
<object class="GtkBox">
<property name="visible">True</property>
<property name="spacing">12</property>
<child>
<object class="GtkLabel" id="browsers_label">
<property name="visible">True</property>
<property name="xalign">1.0</property>
<property name="label" translatable="yes">Web _Browsers</property>
<property name="wrap">True</property>
<property name="use-underline">True</property>
<property name="mnemonic-widget">allow_web_browsers_switch</property>
<style>
<class name="dim-label" />
</style>
<accessibility>
<relation target="allow_web_browsers_switch" type="label-for"/>
</accessibility>
</object>
</child>
<child>
<object class="GtkSwitch" id="allow_web_browsers_switch">
<property name="visible">True</property>
<property name="hexpand">True</property>
<property name="halign">start</property>
<signal name="notify::active" handler="on_allow_web_browsers_switch_active_changed_cb" object="MctUserControls" swapped="no" />
</object>
</child>
</object>
<packing>
<property name="top-attach">5</property>
<property name="left-attach">0</property>
<property name="width">2</property>
</packing>
</child>
<!-- App Center Restrictions -->
<child>
<object class="GtkLabel">
@ -173,7 +226,7 @@
</attributes>
</object>
<packing>
<property name="top-attach">6</property>
<property name="top-attach">2</property>
<property name="left-attach">0</property>
</packing>
</child>
@ -211,7 +264,7 @@
</object>
<packing>
<property name="top-attach">7</property>
<property name="top-attach">3</property>
<property name="left-attach">0</property>
<property name="width">2</property>
</packing>
@ -250,7 +303,7 @@
</object>
<packing>
<property name="top-attach">8</property>
<property name="top-attach">4</property>
<property name="left-attach">0</property>
<property name="width">2</property>
</packing>
@ -291,7 +344,7 @@
</object>
<packing>
<property name="top-attach">9</property>
<property name="top-attach">5</property>
<property name="left-attach">0</property>
<property name="width">2</property>
</packing>
@ -318,10 +371,22 @@
<object class="GtkSizeGroup">
<property name="mode">horizontal</property>
<widgets>
<widget name="browsers_label" />
<widget name="allow_web_browsers_label" />
<widget name="allow_web_browsers_description" />
<widget name="restrict_applications_label" />
<widget name="restrict_applications_description" />
<widget name="app_restriction_label" />
<widget name="user_installation_label" />
<widget name="system_installation_label" />
</widgets>
</object>
<object class="MctRestrictApplicationsDialog" id="restrict_applications_dialog">
<property name="visible">False</property>
<property name="modal">True</property>
<property name="destroy-with-parent">True</property>
<property name="use-header-bar">1</property>
<signal name="delete-event" handler="on_restrict_applications_dialog_delete_event_cb" />
<signal name="response" handler="on_restrict_applications_dialog_response_cb" />
</object>
</interface>