From c91ad788f5c023f41a25d222e6858de3aea07653 Mon Sep 17 00:00:00 2001
From: wurstsalat <mailtrash@posteo.de>
Date: Sun, 2 May 2021 15:04:16 +0200
Subject: [PATCH] StartChat: Add filter bar

---
 gajim/data/gui/start_chat_dialog.ui           | 233 ++++++++++++------
 .../feather-filter-symbolic.symbolic.png      | Bin 0 -> 273 bytes
 .../feather-filter-symbolic.symbolic.png      | Bin 0 -> 485 bytes
 .../devices/feather-filter-symbolic.svg       |  60 +++++
 gajim/gtk/start_chat.py                       |  18 ++
 5 files changed, 232 insertions(+), 79 deletions(-)
 create mode 100644 gajim/data/icons/hicolor/16x16/devices/feather-filter-symbolic.symbolic.png
 create mode 100644 gajim/data/icons/hicolor/32x32/devices/feather-filter-symbolic.symbolic.png
 create mode 100644 gajim/data/icons/hicolor/scalable/devices/feather-filter-symbolic.svg

diff --git a/gajim/data/gui/start_chat_dialog.ui b/gajim/data/gui/start_chat_dialog.ui
index ea506f68a2..f5fcb2d334 100644
--- a/gajim/data/gui/start_chat_dialog.ui
+++ b/gajim/data/gui/start_chat_dialog.ui
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<!-- Generated with glade 3.36.0 -->
+<!-- Generated with glade 3.38.2 -->
 <interface>
   <requires lib="gtk+" version="3.22"/>
   <object class="GtkListStore" id="account_store">
@@ -14,24 +14,24 @@
   </object>
   <object class="GtkStack" id="stack">
     <property name="visible">True</property>
-    <property name="can_focus">False</property>
+    <property name="can-focus">False</property>
     <signal name="notify::visible-child-name" handler="_on_page_changed" swapped="no"/>
     <child>
       <object class="GtkBox">
         <property name="visible">True</property>
-        <property name="can_focus">False</property>
+        <property name="can-focus">False</property>
         <property name="orientation">vertical</property>
         <child>
           <object class="GtkInfoBar" id="infobar">
             <property name="visible">True</property>
-            <property name="can_focus">False</property>
+            <property name="can-focus">False</property>
             <property name="homogeneous">True</property>
-            <property name="show_close_button">True</property>
+            <property name="show-close-button">True</property>
             <signal name="response" handler="_on_infobar_response" swapped="no"/>
             <child internal-child="action_area">
               <object class="GtkButtonBox">
-                <property name="can_focus">False</property>
-                <property name="layout_style">end</property>
+                <property name="can-focus">False</property>
+                <property name="layout-style">end</property>
                 <child>
                   <placeholder/>
                 </child>
@@ -44,13 +44,13 @@
             </child>
             <child internal-child="content_area">
               <object class="GtkBox">
-                <property name="can_focus">False</property>
+                <property name="can-focus">False</property>
                 <property name="spacing">6</property>
                 <child>
                   <object class="GtkImage">
                     <property name="visible">True</property>
-                    <property name="can_focus">False</property>
-                    <property name="icon_name">dialog-information-symbolic</property>
+                    <property name="can-focus">False</property>
+                    <property name="icon-name">dialog-information-symbolic</property>
                     <property name="icon_size">3</property>
                   </object>
                   <packing>
@@ -62,10 +62,10 @@
                 <child>
                   <object class="GtkLabel">
                     <property name="visible">True</property>
-                    <property name="can_focus">False</property>
+                    <property name="can-focus">False</property>
                     <property name="label" translatable="yes">Start a new chat, join a group chat or search for new group chats globally. You can also enter an XMPP address.</property>
                     <property name="wrap">True</property>
-                    <property name="max_width_chars">46</property>
+                    <property name="max-width-chars">46</property>
                     <property name="xalign">0</property>
                   </object>
                   <packing>
@@ -91,25 +91,26 @@
         <child>
           <object class="GtkBox" id="box">
             <property name="visible">True</property>
-            <property name="can_focus">False</property>
-            <property name="border_width">18</property>
+            <property name="can-focus">False</property>
+            <property name="border-width">18</property>
             <property name="orientation">vertical</property>
             <property name="spacing">6</property>
             <child>
               <object class="GtkBox">
                 <property name="visible">True</property>
-                <property name="can_focus">False</property>
+                <property name="can-focus">False</property>
                 <property name="spacing">6</property>
                 <child>
                   <object class="GtkSearchEntry" id="search_entry">
                     <property name="visible">True</property>
-                    <property name="can_focus">True</property>
-                    <property name="has_focus">True</property>
-                    <property name="is_focus">True</property>
+                    <property name="can-focus">True</property>
+                    <property name="has-focus">True</property>
+                    <property name="is-focus">True</property>
                     <property name="hexpand">True</property>
-                    <property name="primary_icon_name">edit-find-symbolic</property>
-                    <property name="primary_icon_activatable">False</property>
-                    <property name="primary_icon_sensitive">False</property>
+                    <property name="primary-icon-name">edit-find-symbolic</property>
+                    <property name="primary-icon-activatable">False</property>
+                    <property name="primary-icon-sensitive">False</property>
+                    <property name="placeholder-text" translatable="yes">Search…</property>
                   </object>
                   <packing>
                     <property name="expand">False</property>
@@ -117,30 +118,104 @@
                     <property name="position">0</property>
                   </packing>
                 </child>
+                <child>
+                  <object class="GtkToggleButton" id="filter_bar_toggle">
+                    <property name="visible">True</property>
+                    <property name="can-focus">True</property>
+                    <property name="receives-default">True</property>
+                    <property name="tooltip-text" translatable="yes">Filter Chats</property>
+                    <property name="halign">end</property>
+                    <signal name="toggled" handler="_on_filter_bar_toggled" swapped="no"/>
+                    <child>
+                      <object class="GtkImage">
+                        <property name="visible">True</property>
+                        <property name="can-focus">False</property>
+                        <property name="icon-name">feather-filter-symbolic</property>
+                      </object>
+                    </child>
+                  </object>
+                  <packing>
+                    <property name="expand">False</property>
+                    <property name="fill">True</property>
+                    <property name="position">1</property>
+                  </packing>
+                </child>
                 <child>
                   <object class="GtkToggleButton" id="global_search_toggle">
                     <property name="visible">True</property>
-                    <property name="can_focus">True</property>
-                    <property name="receives_default">True</property>
-                    <property name="tooltip_text" translatable="yes">Global Group Chat Search</property>
+                    <property name="can-focus">True</property>
+                    <property name="receives-default">True</property>
+                    <property name="tooltip-text" translatable="yes">Global Group Chat Search</property>
                     <property name="halign">end</property>
                     <property name="relief">half</property>
                     <signal name="toggled" handler="_on_global_search_toggle" swapped="no"/>
                     <child>
                       <object class="GtkImage">
                         <property name="visible">True</property>
-                        <property name="can_focus">False</property>
-                        <property name="icon_name">feather-globe-symbolic</property>
+                        <property name="can-focus">False</property>
+                        <property name="icon-name">feather-globe-symbolic</property>
                       </object>
                     </child>
                   </object>
                   <packing>
                     <property name="expand">False</property>
                     <property name="fill">True</property>
-                    <property name="position">1</property>
+                    <property name="position">2</property>
                   </packing>
                 </child>
               </object>
+              <packing>
+                <property name="expand">False</property>
+                <property name="fill">True</property>
+                <property name="position">0</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkRevealer" id="filter_bar_revealer">
+                <property name="visible">True</property>
+                <property name="can-focus">False</property>
+                <property name="transition-duration">100</property>
+                <child>
+                  <object class="GtkBox">
+                    <property name="visible">True</property>
+                    <property name="can-focus">False</property>
+                    <property name="halign">center</property>
+                    <child>
+                      <object class="GtkToggleButton" id="filter_chats">
+                        <property name="label" translatable="yes">Chats</property>
+                        <property name="visible">True</property>
+                        <property name="can-focus">True</property>
+                        <property name="receives-default">True</property>
+                        <property name="active">True</property>
+                        <signal name="toggled" handler="_on_filter_toggled" swapped="no"/>
+                      </object>
+                      <packing>
+                        <property name="expand">False</property>
+                        <property name="fill">True</property>
+                        <property name="position">0</property>
+                      </packing>
+                    </child>
+                    <child>
+                      <object class="GtkToggleButton" id="filter_groupchats">
+                        <property name="label" translatable="yes">Group Chats</property>
+                        <property name="visible">True</property>
+                        <property name="can-focus">True</property>
+                        <property name="receives-default">True</property>
+                        <property name="active">True</property>
+                        <signal name="toggled" handler="_on_filter_toggled" swapped="no"/>
+                      </object>
+                      <packing>
+                        <property name="expand">False</property>
+                        <property name="fill">True</property>
+                        <property name="position">1</property>
+                      </packing>
+                    </child>
+                    <style>
+                      <class name="linked"/>
+                    </style>
+                  </object>
+                </child>
+              </object>
               <packing>
                 <property name="expand">False</property>
                 <property name="fill">True</property>
@@ -150,20 +225,20 @@
             <child>
               <object class="GtkScrolledWindow" id="scrolledwindow">
                 <property name="visible">True</property>
-                <property name="can_focus">True</property>
-                <property name="hscrollbar_policy">never</property>
-                <property name="shadow_type">in</property>
+                <property name="can-focus">True</property>
+                <property name="hscrollbar-policy">never</property>
+                <property name="shadow-type">in</property>
                 <child>
                   <object class="GtkViewport">
                     <property name="visible">True</property>
-                    <property name="can_focus">False</property>
+                    <property name="can-focus">False</property>
                     <child>
                       <object class="GtkListBox" id="listbox">
                         <property name="name">StartChatListBox</property>
                         <property name="visible">True</property>
-                        <property name="can_focus">False</property>
-                        <property name="selection_mode">browse</property>
-                        <property name="activate_on_single_click">False</property>
+                        <property name="can-focus">False</property>
+                        <property name="selection-mode">browse</property>
+                        <property name="activate-on-single-click">False</property>
                       </object>
                     </child>
                   </object>
@@ -190,12 +265,12 @@
     <child>
       <object class="GtkBox">
         <property name="visible">True</property>
-        <property name="can_focus">False</property>
+        <property name="can-focus">False</property>
         <property name="orientation">vertical</property>
         <child>
           <object class="GtkSpinner" id="spinner">
             <property name="visible">True</property>
-            <property name="can_focus">False</property>
+            <property name="can-focus">False</property>
             <property name="halign">center</property>
             <property name="valign">center</property>
             <property name="vexpand">True</property>
@@ -216,21 +291,21 @@
     <child>
       <object class="GtkBox">
         <property name="visible">True</property>
-        <property name="can_focus">False</property>
+        <property name="can-focus">False</property>
         <property name="orientation">vertical</property>
         <child>
           <object class="GtkBox">
             <property name="visible">True</property>
-            <property name="can_focus">False</property>
+            <property name="can-focus">False</property>
             <property name="orientation">vertical</property>
             <property name="spacing">12</property>
             <property name="homogeneous">True</property>
             <child>
               <object class="GtkImage">
                 <property name="visible">True</property>
-                <property name="can_focus">False</property>
+                <property name="can-focus">False</property>
                 <property name="valign">end</property>
-                <property name="icon_name">dialog-error</property>
+                <property name="icon-name">dialog-error</property>
                 <property name="icon_size">6</property>
               </object>
               <packing>
@@ -242,7 +317,7 @@
             <child>
               <object class="GtkLabel" id="error_label">
                 <property name="visible">True</property>
-                <property name="can_focus">False</property>
+                <property name="can-focus">False</property>
                 <property name="valign">start</property>
                 <property name="justify">center</property>
                 <property name="wrap">True</property>
@@ -267,16 +342,16 @@
           <object class="GtkButton">
             <property name="label" translatable="yes">_Back</property>
             <property name="visible">True</property>
-            <property name="can_focus">True</property>
-            <property name="receives_default">True</property>
+            <property name="can-focus">True</property>
+            <property name="receives-default">True</property>
             <property name="halign">start</property>
-            <property name="use_underline">True</property>
+            <property name="use-underline">True</property>
             <signal name="clicked" handler="_on_back_clicked" swapped="no"/>
           </object>
           <packing>
             <property name="expand">False</property>
             <property name="fill">True</property>
-            <property name="pack_type">end</property>
+            <property name="pack-type">end</property>
             <property name="position">1</property>
           </packing>
         </child>
@@ -292,7 +367,7 @@
     <child>
       <object class="GtkBox" id="info_box">
         <property name="visible">True</property>
-        <property name="can_focus">False</property>
+        <property name="can-focus">False</property>
         <property name="orientation">vertical</property>
         <property name="spacing">6</property>
         <child>
@@ -301,11 +376,11 @@
         <child>
           <object class="GtkBox">
             <property name="visible">True</property>
-            <property name="can_focus">False</property>
+            <property name="can-focus">False</property>
             <child>
               <object class="GtkBox" id="join_box">
                 <property name="visible">True</property>
-                <property name="can_focus">False</property>
+                <property name="can-focus">False</property>
                 <child>
                   <placeholder/>
                 </child>
@@ -313,10 +388,10 @@
                   <object class="GtkButton" id="join_button">
                     <property name="label" translatable="yes">_Join</property>
                     <property name="visible">True</property>
-                    <property name="can_focus">True</property>
-                    <property name="receives_default">True</property>
+                    <property name="can-focus">True</property>
+                    <property name="receives-default">True</property>
                     <property name="halign">end</property>
-                    <property name="use_underline">True</property>
+                    <property name="use-underline">True</property>
                     <signal name="clicked" handler="_on_join_clicked" swapped="no"/>
                     <style>
                       <class name="suggested-action"/>
@@ -325,7 +400,7 @@
                   <packing>
                     <property name="expand">False</property>
                     <property name="fill">True</property>
-                    <property name="pack_type">end</property>
+                    <property name="pack-type">end</property>
                     <property name="position">1</property>
                   </packing>
                 </child>
@@ -336,7 +411,7 @@
               <packing>
                 <property name="expand">False</property>
                 <property name="fill">True</property>
-                <property name="pack_type">end</property>
+                <property name="pack-type">end</property>
                 <property name="position">1</property>
               </packing>
             </child>
@@ -344,10 +419,10 @@
               <object class="GtkButton">
                 <property name="label" translatable="yes">_Back</property>
                 <property name="visible">True</property>
-                <property name="can_focus">True</property>
-                <property name="receives_default">True</property>
+                <property name="can-focus">True</property>
+                <property name="receives-default">True</property>
                 <property name="halign">start</property>
-                <property name="use_underline">True</property>
+                <property name="use-underline">True</property>
                 <signal name="clicked" handler="_on_back_clicked" swapped="no"/>
               </object>
               <packing>
@@ -360,7 +435,7 @@
           <packing>
             <property name="expand">False</property>
             <property name="fill">True</property>
-            <property name="pack_type">end</property>
+            <property name="pack-type">end</property>
             <property name="position">1</property>
           </packing>
         </child>
@@ -376,13 +451,13 @@
     <child>
       <object class="GtkBox">
         <property name="visible">True</property>
-        <property name="can_focus">False</property>
+        <property name="can-focus">False</property>
         <property name="orientation">vertical</property>
         <property name="spacing">6</property>
         <child>
           <object class="GtkLabel">
             <property name="visible">True</property>
-            <property name="can_focus">False</property>
+            <property name="can-focus">False</property>
             <property name="label" translatable="yes">Select Account</property>
             <property name="justify">center</property>
             <property name="wrap">True</property>
@@ -400,18 +475,18 @@
         <child>
           <object class="GtkScrolledWindow">
             <property name="visible">True</property>
-            <property name="can_focus">True</property>
+            <property name="can-focus">True</property>
             <property name="vexpand">True</property>
-            <property name="hscrollbar_policy">never</property>
-            <property name="shadow_type">in</property>
+            <property name="hscrollbar-policy">never</property>
+            <property name="shadow-type">in</property>
             <child>
               <object class="GtkTreeView" id="account_view">
                 <property name="visible">True</property>
-                <property name="can_focus">True</property>
+                <property name="can-focus">True</property>
                 <property name="model">account_store</property>
-                <property name="headers_visible">False</property>
-                <property name="enable_search">False</property>
-                <property name="show_expanders">False</property>
+                <property name="headers-visible">False</property>
+                <property name="enable-search">False</property>
+                <property name="show-expanders">False</property>
                 <signal name="row-activated" handler="_on_select_clicked" swapped="no"/>
                 <child internal-child="selection">
                   <object class="GtkTreeSelection"/>
@@ -454,16 +529,16 @@
         <child>
           <object class="GtkBox">
             <property name="visible">True</property>
-            <property name="can_focus">False</property>
+            <property name="can-focus">False</property>
             <property name="homogeneous">True</property>
             <child>
               <object class="GtkButton">
                 <property name="label" translatable="yes">_Back</property>
                 <property name="visible">True</property>
-                <property name="can_focus">True</property>
-                <property name="receives_default">True</property>
+                <property name="can-focus">True</property>
+                <property name="receives-default">True</property>
                 <property name="halign">start</property>
-                <property name="use_underline">True</property>
+                <property name="use-underline">True</property>
                 <signal name="clicked" handler="_on_back_clicked" swapped="no"/>
               </object>
               <packing>
@@ -476,10 +551,10 @@
               <object class="GtkButton">
                 <property name="label" translatable="yes">_Select</property>
                 <property name="visible">True</property>
-                <property name="can_focus">True</property>
-                <property name="receives_default">True</property>
+                <property name="can-focus">True</property>
+                <property name="receives-default">True</property>
                 <property name="halign">end</property>
-                <property name="use_underline">True</property>
+                <property name="use-underline">True</property>
                 <signal name="clicked" handler="_on_select_clicked" swapped="no"/>
                 <style>
                   <class name="suggested-action"/>
@@ -495,7 +570,7 @@
           <packing>
             <property name="expand">False</property>
             <property name="fill">True</property>
-            <property name="pack_type">end</property>
+            <property name="pack-type">end</property>
             <property name="position">2</property>
           </packing>
         </child>
@@ -511,7 +586,7 @@
   </object>
   <object class="GtkBox" id="placeholder">
     <property name="visible">True</property>
-    <property name="can_focus">False</property>
+    <property name="can-focus">False</property>
     <property name="halign">center</property>
     <property name="valign">center</property>
     <property name="orientation">vertical</property>
@@ -519,8 +594,8 @@
     <child>
       <object class="GtkImage">
         <property name="visible">True</property>
-        <property name="can_focus">False</property>
-        <property name="icon_name">avatar-default-symbolic</property>
+        <property name="can-focus">False</property>
+        <property name="icon-name">avatar-default-symbolic</property>
         <property name="icon_size">6</property>
         <style>
           <class name="dim-label"/>
@@ -535,12 +610,12 @@
     <child>
       <object class="GtkLabel">
         <property name="visible">True</property>
-        <property name="can_focus">False</property>
+        <property name="can-focus">False</property>
         <property name="label" translatable="yes">No contacts found
 You can also type an XMPP address</property>
         <property name="justify">center</property>
         <property name="wrap">True</property>
-        <property name="max_width_chars">35</property>
+        <property name="max-width-chars">35</property>
         <style>
           <class name="dim-label"/>
         </style>
diff --git a/gajim/data/icons/hicolor/16x16/devices/feather-filter-symbolic.symbolic.png b/gajim/data/icons/hicolor/16x16/devices/feather-filter-symbolic.symbolic.png
new file mode 100644
index 0000000000000000000000000000000000000000..4f6715659c7757280fe5f16c741c3ce345b5c460
GIT binary patch
literal 273
zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`EX7WqAsj$Z!;#Vf<e%_#aSXBO
z-Fm?`%PCNV<$=F&E|Z>uz=e{RD!$VuxG8qDZr%Fr6_d`I%c+u?o46HkL~}$sdI;9f
zJG#56-akIB;6Xv+xw)2yKlnchI3{qt{)(Q#iHCB@A|K}k#T?gPCH+XU_)Ad7?}t^n
z^%swFtrdR6HtmH<ZN*Xkd3|r>KK5=8{<!XlZOy~H?)^u3<b$Tf9&(9!<2$49f!FgR
z(jfv5ReeNuFsmG$*|xo)<+h_;?h=)lD+!Hea+_vd|EQ^Fa4Kt(yYS*QZ0Q@>E;T9K
Ul1$&&4)ha)r>mdKI;Vst0CQ+=5dZ)H

literal 0
HcmV?d00001

diff --git a/gajim/data/icons/hicolor/32x32/devices/feather-filter-symbolic.symbolic.png b/gajim/data/icons/hicolor/32x32/devices/feather-filter-symbolic.symbolic.png
new file mode 100644
index 0000000000000000000000000000000000000000..349775bd137eb224efe2a5c05afbeb89282ea729
GIT binary patch
literal 485
zcmV<B0UG{^P)<h;3K|Lk000e1NJLTq001BW001Be1^@s6b9#F800004b3#c}2nYxW
zd<bNS0004;Nkl<ZScUD@J!=$U6b0ZX>n7MJ3W8u0MQwywiwGhXVj=kf0quf~7N)S!
zDurSzVk3gKX|2RU>{17j6c$=4N`e-CCS&o=FgK7*c6Q&L#yzksbN8Hk&ffXD{O_13
zzq`1A11<Tk;Waj@!d(<Cf9^o14A33TAKejM>Qk^+8p)aR_#<v(Gm}{d4=`OGFH5KV
zXCxiMd-aI!Wip5Rq3;JA?nOL>^+2A_V16z1`-aoI2`=GJDflgoYEYb$#$4bpuJkLs
zsZRYBCkHS;hR>nTjiwDA1@S5lHqh?J+n|5a)ExHUMQHK{Q+?<r@ha$E8sawJhn3Lm
zX&;)$f&Wg1r|VIC3QceAz+DKuFE}x*d4;p;t9b*n+i)&RS9*b8IG@YB!kqMEEbtvO
z;kTKxR+OB%+~yS))gyiu>d!-caa87{cSmKk6zWT%KCz9iCpx=RwxGzw88|?8j021V
z3=`luj^ql`1Z(Ph{s$gP`(#xcIcBA$wb#1c3MO&Y)+M&p02QWiT|JSNwgbc<7p2vH
bj7Ine!>W*T4pu}E00000NkvXXu0mjfFQe7;

literal 0
HcmV?d00001

diff --git a/gajim/data/icons/hicolor/scalable/devices/feather-filter-symbolic.svg b/gajim/data/icons/hicolor/scalable/devices/feather-filter-symbolic.svg
new file mode 100644
index 0000000000..edd49d13e5
--- /dev/null
+++ b/gajim/data/icons/hicolor/scalable/devices/feather-filter-symbolic.svg
@@ -0,0 +1,60 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="24"
+   height="24"
+   viewBox="0 0 24 24"
+   fill="none"
+   stroke="currentColor"
+   stroke-width="2"
+   stroke-linecap="round"
+   stroke-linejoin="round"
+   class="feather feather-filter"
+   version="1.1"
+   id="svg4"
+   sodipodi:docname="feather-filter-symbolic.svg"
+   inkscape:version="1.0.2 (e86c870879, 2021-01-15, custom)">
+  <metadata
+     id="metadata10">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <defs
+     id="defs8" />
+  <sodipodi:namedview
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1"
+     objecttolerance="10"
+     gridtolerance="10"
+     guidetolerance="10"
+     inkscape:pageopacity="0"
+     inkscape:pageshadow="2"
+     inkscape:window-width="1920"
+     inkscape:window-height="998"
+     id="namedview6"
+     showgrid="false"
+     inkscape:zoom="34.291667"
+     inkscape:cx="12"
+     inkscape:cy="12"
+     inkscape:window-x="0"
+     inkscape:window-y="0"
+     inkscape:window-maximized="1"
+     inkscape:current-layer="svg4" />
+  <path
+     style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:sans-serif;font-variant-ligatures:normal;font-variant-position:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-alternates:normal;font-variant-east-asian:normal;font-feature-settings:normal;font-variation-settings:normal;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:normal;word-spacing:normal;text-transform:none;writing-mode:lr-tb;direction:ltr;text-orientation:mixed;dominant-baseline:auto;baseline-shift:baseline;text-anchor:start;white-space:normal;shape-padding:0;shape-margin:0;inline-size:0;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;vector-effect:none;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate;stop-color:#000000;stop-opacity:1;opacity:1"
+     d="M 2 2 A 1.0001 1.0001 0 0 0 1.2363281 3.6464844 L 9 12.826172 L 9 19 A 1.0001 1.0001 0 0 0 9.5527344 19.894531 L 13.552734 21.894531 A 1.0001 1.0001 0 0 0 15 21 L 15 12.826172 L 22.763672 3.6464844 A 1.0001 1.0001 0 0 0 22 2 L 2 2 z M 4.15625 4 L 19.84375 4 L 13.236328 11.814453 A 1.0001 1.0001 0 0 0 13 12.460938 L 13 19.382812 L 11 18.382812 L 11 12.460938 A 1.0001 1.0001 0 0 0 10.763672 11.814453 L 4.15625 4 z "
+     id="polygon2" />
+</svg>
diff --git a/gajim/gtk/start_chat.py b/gajim/gtk/start_chat.py
index 7227b9c04d..b947e151d9 100644
--- a/gajim/gtk/start_chat.py
+++ b/gajim/gtk/start_chat.py
@@ -283,6 +283,13 @@ def _on_infobar_response(self, _widget, response):
             self._ui.infobar.set_revealed(False)
             app.settings.set('show_help_start_chat', False)
 
+    def _on_filter_bar_toggled(self, toggle_button):
+        active = toggle_button.get_active()
+        self._ui.filter_bar_revealer.set_reveal_child(active)
+
+    def _on_filter_toggled(self, _toggle_button):
+        self._ui.listbox.invalidate_filter()
+
     def _start_new_chat(self, row):
         if row.new:
             try:
@@ -406,6 +413,8 @@ def _on_global_search_toggle(self, button):
         self._ui.search_entry.grab_focus()
         image_style_context = button.get_children()[0].get_style_context()
         if button.get_active():
+            self._ui.filter_bar_toggle.set_active(False)
+            self._ui.filter_bar_toggle.set_sensitive(False)
             image_style_context.add_class('selected-color')
             self._set_listbox(self._global_search_listbox)
             if self._ui.search_entry.get_text():
@@ -413,6 +422,7 @@ def _on_global_search_toggle(self, button):
             self._remove_new_jid_row()
             self._ui.listbox.invalidate_filter()
         else:
+            self._ui.filter_bar_toggle.set_sensitive(True)
             self._ui.search_entry.set_text('')
             image_style_context.remove_class('selected-color')
             self._set_listbox(self._ui.listbox)
@@ -495,6 +505,14 @@ def _filter_func(self, row, _user_data):
         search_text = self._ui.search_entry.get_text().lower()
         search_text_list = search_text.split()
         row_text = row.get_search_text().lower()
+
+        show_chats = self._ui.filter_chats.get_active()
+        show_groupchats = self._ui.filter_groupchats.get_active()
+        if row.groupchat and not show_groupchats:
+            return False
+        if not row.groupchat and not show_chats:
+            return False
+
         for text in search_text_list:
             if text not in row_text:
                 GLib.timeout_add(50, self.select_first_row)
-- 
GitLab