extensions-app: Use ListModel to track extensions

Manually adding and removing rows to dynamic lists is rather
old-fashioned, GTK 4 strongly encourages the use of models.

Modernize the code by exposing extensions as ListModel, and
bind it to the two lists with appropriate filters.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/3067>
This commit is contained in:
Florian Müllner
2023-12-19 18:57:37 +01:00
committed by Marge Bot
parent 2c592059bc
commit 7907b9754b
3 changed files with 89 additions and 105 deletions

View File

@ -12,6 +12,43 @@
</item>
</section>
</menu>
<object class="GtkSortListModel" id="sortModel">
<property name="sorter">
<object class="GtkStringSorter">
<property name="expression">
<lookup name="name" type="Extension"/>
</property>
</object>
</property>
</object>
<object class="GtkStringFilter" id="searchFilter">
<property name="ignore-case">true</property>
<property name="match-mode">substring</property>
<property name="expression">
<lookup name="name" type="Extension"/>
</property>
</object>
<object class="GtkFilterListModel" id="userListModel">
<property name="model">sortModel</property>
<property name="filter">
<object class="GtkBoolFilter">
<property name="expression">
<lookup name="is-user" type="Extension"/>
</property>
</object>
</property>
</object>
<object class="GtkFilterListModel" id="systemListModel">
<property name="model">sortModel</property>
<property name="filter">
<object class="GtkBoolFilter">
<property name="invert">true</property>
<property name="expression">
<lookup name="is-user" type="Extension"/>
</property>
</object>
</property>
</object>
<template class="ExtensionsWindow" parent="AdwApplicationWindow">
<property name="default-width">800</property>
<property name="default-height">500</property>
@ -139,6 +176,10 @@
<child>
<object class="AdwPreferencesGroup" id="userGroup">
<property name="title" translatable="yes">User Extensions</property>
<property name="visible"
bind-source="userListModel"
bind-property="n-items"
bind-flags="sync-create"/>
<child>
<object class="GtkListBox" id="userList">
<property name="selection-mode">none</property>
@ -155,6 +196,10 @@
<child>
<object class="AdwPreferencesGroup" id="systemGroup">
<property name="title" translatable="yes">System Extensions</property>
<property name="visible"
bind-source="systemListModel"
bind-property="n-items"
bind-flags="sync-create"/>
<child>
<object class="GtkListBox" id="systemList">
<property name="selection-mode">none</property>