search-button: Port results to GtkListView

Port the search results list to GtkListview. Use bindings to set
the title, icon, and subtitle of each row. Remove GcalSearchHitRow
as it's unused now.
This commit is contained in:
Georges Basile Stavracas Neto
2023-03-16 09:28:30 -03:00
parent 6b57c459a3
commit 21412ea3ba
9 changed files with 228 additions and 338 deletions
+114 -9
View File
@@ -52,8 +52,29 @@
<object class="GtkSearchEntry" id="entry">
<property name="max-width-chars">0</property>
<property name="width-chars">0</property>
<signal name="activate" handler="on_entry_activate_cb" object="GcalSearchButton" swapped="no" />
<signal name="next-match" handler="on_entry_next_match_cb" object="GcalSearchButton" swapped="no" />
<signal name="previous-match" handler="on_entry_previous_match_cb" object="GcalSearchButton" swapped="no" />
<signal name="search-changed" handler="on_entry_search_changed_cb" object="GcalSearchButton" swapped="no" />
<signal name="stop-search" handler="on_entry_stop_search_cb" object="GcalSearchButton" swapped="no" />
<child>
<object class="GtkShortcutController">
<child>
<object class="GtkShortcut">
<property name='trigger'>Up</property>
<property name='action'>signal(previous-match)</property>
</object>
</child>
<child>
<object class="GtkShortcut">
<property name='trigger'>Down</property>
<property name='action'>signal(next-match)</property>
</object>
</child>
</object>
</child>
</object>
</property>
</object>
@@ -65,7 +86,7 @@
<object class="GtkPopover" id="popover">
<property name="position">bottom</property>
<property name="autohide">False</property>
<property name="default-widget">results_listbox</property>
<property name="default-widget">results_listview</property>
<style>
<class name="menu" />
</style>
@@ -84,18 +105,102 @@
<property name="hscrollbar-policy">never</property>
<child>
<object class="GtkViewport">
<property name="scroll-to-focus">True</property>
<object class="GtkListView" id="results_listview">
<property name="hscroll-policy">natural</property>
<property name="vscroll-policy">natural</property>
<child>
<object class="GtkListBox" id="results_listbox">
<property name="selection-mode">none</property>
<signal name="row-activated" handler="on_results_listbox_row_activated_cb" object="GcalSearchButton" swapped="no" />
<property name="single-click-activate">True</property>
<property name="model">
<object class="GtkSingleSelection" id="results_selection_model">
<property name="autoselect">True</property>
<property name="can-unselect">False</property>
</object>
</child>
</property>
<property name="factory">
<object class="GtkBuilderListItemFactory">
<property name="bytes"><![CDATA[
<?xml version="1.0" encoding="UTF-8"?>
<interface>
<template class="GtkListItem">
<property name="activatable">True</property>
<property name="selectable">True</property>
<property name="child">
<object class="GtkBox">
<child>
<object class="GtkImage" id="image">
<property name="valign">center</property>
<property name="hexpand">False</property>
<property name="icon-size">normal</property>
<binding name="paintable">
<lookup name="primary-icon" type="GcalSearchHit">
<lookup name="item">GtkListItem</lookup>
</lookup>
</binding>
<style>
<class name="title"/>
</style>
</object>
</child>
<child>
<object class="GtkLabel" id="title">
<property name="use-markup">True</property>
<property name="ellipsize">end</property>
<property name="xalign">0.0</property>
<property name="max-width-chars">40</property>
<binding name="label">
<closure type="gchararray" function="escape_markup_cb">
<lookup name="title" type="GcalSearchHit">
<lookup name="item">GtkListItem</lookup>
</lookup>
</closure>
</binding>
</object>
</child>
<child>
<object class="GtkLabel" id="separator">
<property name="label">—</property>
<binding name="visible">
<closure type="gboolean" function="string_is_not_empty_cb">
<lookup name="subtitle" type="GcalSearchHit">
<lookup name="item">GtkListItem</lookup>
</lookup>
</closure>
</binding>
<style>
<class name="dim-label"/>
</style>
</object>
</child>
<child>
<object class="GtkLabel" id="subtitle">
<property name="hexpand">True</property>
<property name="use-markup">True</property>
<property name="ellipsize">end</property>
<property name="xalign">0.0</property>
<binding name="label">
<closure type="gchararray" function="escape_markup_cb">
<lookup name="subtitle" type="GcalSearchHit">
<lookup name="item">GtkListItem</lookup>
</lookup>
</closure>
</binding>
<style>
<class name="subtitle"/>
</style>
</object>
</child>
</object>
</property>
</template>
</interface>
]]></property>
</object>
</property>
<signal name="activate" handler="on_results_listview_activated_cb" object="GcalSearchButton" swapped="no" />
</object>
</child>