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:

committed by
Marge Bot

parent
2c592059bc
commit
7907b9754b
@ -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>
|
||||
|
Reference in New Issue
Block a user