Daniel Brötzmann pushed to branch master at gajim / gajim

Commits:

12 changed files:

Changes:

  • gajim/data/gui/groupchat_control.ui
    ... ... @@ -184,7 +184,6 @@
    184 184
                     <property name="spacing">3</property>
    
    185 185
                     <child>
    
    186 186
                       <object class="GtkBox" id="textview_box">
    
    187
    -                    <property name="width-request">0</property>
    
    188 187
                         <property name="visible">True</property>
    
    189 188
                         <property name="can-focus">False</property>
    
    190 189
                         <property name="margin-end">4</property>
    
    ... ... @@ -619,7 +618,7 @@
    619 618
                     <property name="can-focus">False</property>
    
    620 619
                     <property name="orientation">vertical</property>
    
    621 620
                     <child>
    
    622
    -                  <!-- n-columns=3 n-rows=3 -->
    
    621
    +                  <!-- n-columns=1 n-rows=3 -->
    
    623 622
                       <object class="GtkGrid">
    
    624 623
                         <property name="visible">True</property>
    
    625 624
                         <property name="can-focus">False</property>
    
    ... ... @@ -708,24 +707,6 @@
    708 707
                             <property name="top-attach">2</property>
    
    709 708
                           </packing>
    
    710 709
                         </child>
    
    711
    -                    <child>
    
    712
    -                      <placeholder/>
    
    713
    -                    </child>
    
    714
    -                    <child>
    
    715
    -                      <placeholder/>
    
    716
    -                    </child>
    
    717
    -                    <child>
    
    718
    -                      <placeholder/>
    
    719
    -                    </child>
    
    720
    -                    <child>
    
    721
    -                      <placeholder/>
    
    722
    -                    </child>
    
    723
    -                    <child>
    
    724
    -                      <placeholder/>
    
    725
    -                    </child>
    
    726
    -                    <child>
    
    727
    -                      <placeholder/>
    
    728
    -                    </child>
    
    729 710
                       </object>
    
    730 711
                       <packing>
    
    731 712
                         <property name="expand">False</property>
    
    ... ... @@ -745,7 +726,7 @@
    745 726
                     <property name="can-focus">False</property>
    
    746 727
                     <property name="orientation">vertical</property>
    
    747 728
                     <child>
    
    748
    -                  <!-- n-columns=3 n-rows=3 -->
    
    729
    +                  <!-- n-columns=1 n-rows=3 -->
    
    749 730
                       <object class="GtkGrid">
    
    750 731
                         <property name="visible">True</property>
    
    751 732
                         <property name="can-focus">False</property>
    
    ... ... @@ -843,24 +824,6 @@
    843 824
                             <property name="top-attach">1</property>
    
    844 825
                           </packing>
    
    845 826
                         </child>
    
    846
    -                    <child>
    
    847
    -                      <placeholder/>
    
    848
    -                    </child>
    
    849
    -                    <child>
    
    850
    -                      <placeholder/>
    
    851
    -                    </child>
    
    852
    -                    <child>
    
    853
    -                      <placeholder/>
    
    854
    -                    </child>
    
    855
    -                    <child>
    
    856
    -                      <placeholder/>
    
    857
    -                    </child>
    
    858
    -                    <child>
    
    859
    -                      <placeholder/>
    
    860
    -                    </child>
    
    861
    -                    <child>
    
    862
    -                      <placeholder/>
    
    863
    -                    </child>
    
    864 827
                       </object>
    
    865 828
                       <packing>
    
    866 829
                         <property name="expand">False</property>
    
    ... ... @@ -880,7 +843,7 @@
    880 843
                     <property name="can-focus">False</property>
    
    881 844
                     <property name="orientation">vertical</property>
    
    882 845
                     <child>
    
    883
    -                  <!-- n-columns=3 n-rows=3 -->
    
    846
    +                  <!-- n-columns=1 n-rows=3 -->
    
    884 847
                       <object class="GtkGrid">
    
    885 848
                         <property name="visible">True</property>
    
    886 849
                         <property name="can-focus">False</property>
    
    ... ... @@ -969,24 +932,6 @@
    969 932
                             <property name="top-attach">1</property>
    
    970 933
                           </packing>
    
    971 934
                         </child>
    
    972
    -                    <child>
    
    973
    -                      <placeholder/>
    
    974
    -                    </child>
    
    975
    -                    <child>
    
    976
    -                      <placeholder/>
    
    977
    -                    </child>
    
    978
    -                    <child>
    
    979
    -                      <placeholder/>
    
    980
    -                    </child>
    
    981
    -                    <child>
    
    982
    -                      <placeholder/>
    
    983
    -                    </child>
    
    984
    -                    <child>
    
    985
    -                      <placeholder/>
    
    986
    -                    </child>
    
    987
    -                    <child>
    
    988
    -                      <placeholder/>
    
    989
    -                    </child>
    
    990 935
                       </object>
    
    991 936
                       <packing>
    
    992 937
                         <property name="expand">False</property>
    
    ... ... @@ -1006,7 +951,7 @@
    1006 951
                     <property name="can-focus">False</property>
    
    1007 952
                     <property name="orientation">vertical</property>
    
    1008 953
                     <child>
    
    1009
    -                  <!-- n-columns=3 n-rows=3 -->
    
    954
    +                  <!-- n-columns=1 n-rows=2 -->
    
    1010 955
                       <object class="GtkGrid">
    
    1011 956
                         <property name="visible">True</property>
    
    1012 957
                         <property name="can-focus">False</property>
    
    ... ... @@ -1079,27 +1024,6 @@
    1079 1024
                             <property name="top-attach">0</property>
    
    1080 1025
                           </packing>
    
    1081 1026
                         </child>
    
    1082
    -                    <child>
    
    1083
    -                      <placeholder/>
    
    1084
    -                    </child>
    
    1085
    -                    <child>
    
    1086
    -                      <placeholder/>
    
    1087
    -                    </child>
    
    1088
    -                    <child>
    
    1089
    -                      <placeholder/>
    
    1090
    -                    </child>
    
    1091
    -                    <child>
    
    1092
    -                      <placeholder/>
    
    1093
    -                    </child>
    
    1094
    -                    <child>
    
    1095
    -                      <placeholder/>
    
    1096
    -                    </child>
    
    1097
    -                    <child>
    
    1098
    -                      <placeholder/>
    
    1099
    -                    </child>
    
    1100
    -                    <child>
    
    1101
    -                      <placeholder/>
    
    1102
    -                    </child>
    
    1103 1027
                       </object>
    
    1104 1028
                       <packing>
    
    1105 1029
                         <property name="expand">False</property>
    
    ... ... @@ -1119,7 +1043,7 @@
    1119 1043
                     <property name="can-focus">False</property>
    
    1120 1044
                     <property name="orientation">vertical</property>
    
    1121 1045
                     <child>
    
    1122
    -                  <!-- n-columns=3 n-rows=4 -->
    
    1046
    +                  <!-- n-columns=1 n-rows=4 -->
    
    1123 1047
                       <object class="GtkGrid">
    
    1124 1048
                         <property name="visible">True</property>
    
    1125 1049
                         <property name="can-focus">False</property>
    
    ... ... @@ -1239,30 +1163,6 @@
    1239 1163
                             <property name="top-attach">1</property>
    
    1240 1164
                           </packing>
    
    1241 1165
                         </child>
    
    1242
    -                    <child>
    
    1243
    -                      <placeholder/>
    
    1244
    -                    </child>
    
    1245
    -                    <child>
    
    1246
    -                      <placeholder/>
    
    1247
    -                    </child>
    
    1248
    -                    <child>
    
    1249
    -                      <placeholder/>
    
    1250
    -                    </child>
    
    1251
    -                    <child>
    
    1252
    -                      <placeholder/>
    
    1253
    -                    </child>
    
    1254
    -                    <child>
    
    1255
    -                      <placeholder/>
    
    1256
    -                    </child>
    
    1257
    -                    <child>
    
    1258
    -                      <placeholder/>
    
    1259
    -                    </child>
    
    1260
    -                    <child>
    
    1261
    -                      <placeholder/>
    
    1262
    -                    </child>
    
    1263
    -                    <child>
    
    1264
    -                      <placeholder/>
    
    1265
    -                    </child>
    
    1266 1166
                       </object>
    
    1267 1167
                       <packing>
    
    1268 1168
                         <property name="expand">False</property>
    
    ... ... @@ -1282,7 +1182,7 @@
    1282 1182
                     <property name="can-focus">False</property>
    
    1283 1183
                     <property name="orientation">vertical</property>
    
    1284 1184
                     <child>
    
    1285
    -                  <!-- n-columns=3 n-rows=3 -->
    
    1185
    +                  <!-- n-columns=1 n-rows=3 -->
    
    1286 1186
                       <object class="GtkGrid">
    
    1287 1187
                         <property name="visible">True</property>
    
    1288 1188
                         <property name="can-focus">False</property>
    
    ... ... @@ -1370,24 +1270,6 @@
    1370 1270
                             <property name="top-attach">1</property>
    
    1371 1271
                           </packing>
    
    1372 1272
                         </child>
    
    1373
    -                    <child>
    
    1374
    -                      <placeholder/>
    
    1375
    -                    </child>
    
    1376
    -                    <child>
    
    1377
    -                      <placeholder/>
    
    1378
    -                    </child>
    
    1379
    -                    <child>
    
    1380
    -                      <placeholder/>
    
    1381
    -                    </child>
    
    1382
    -                    <child>
    
    1383
    -                      <placeholder/>
    
    1384
    -                    </child>
    
    1385
    -                    <child>
    
    1386
    -                      <placeholder/>
    
    1387
    -                    </child>
    
    1388
    -                    <child>
    
    1389
    -                      <placeholder/>
    
    1390
    -                    </child>
    
    1391 1273
                       </object>
    
    1392 1274
                       <packing>
    
    1393 1275
                         <property name="expand">False</property>
    
    ... ... @@ -1407,7 +1289,7 @@
    1407 1289
                     <property name="can-focus">False</property>
    
    1408 1290
                     <property name="orientation">vertical</property>
    
    1409 1291
                     <child>
    
    1410
    -                  <!-- n-columns=3 n-rows=3 -->
    
    1292
    +                  <!-- n-columns=1 n-rows=3 -->
    
    1411 1293
                       <object class="GtkGrid" id="info_grid">
    
    1412 1294
                         <property name="visible">True</property>
    
    1413 1295
                         <property name="can-focus">False</property>
    
    ... ... @@ -1477,24 +1359,6 @@
    1477 1359
                             <property name="top-attach">1</property>
    
    1478 1360
                           </packing>
    
    1479 1361
                         </child>
    
    1480
    -                    <child>
    
    1481
    -                      <placeholder/>
    
    1482
    -                    </child>
    
    1483
    -                    <child>
    
    1484
    -                      <placeholder/>
    
    1485
    -                    </child>
    
    1486
    -                    <child>
    
    1487
    -                      <placeholder/>
    
    1488
    -                    </child>
    
    1489
    -                    <child>
    
    1490
    -                      <placeholder/>
    
    1491
    -                    </child>
    
    1492
    -                    <child>
    
    1493
    -                      <placeholder/>
    
    1494
    -                    </child>
    
    1495
    -                    <child>
    
    1496
    -                      <placeholder/>
    
    1497
    -                    </child>
    
    1498 1362
                         <style>
    
    1499 1363
                           <class name="margin-18"/>
    
    1500 1364
                         </style>
    
    ... ... @@ -1517,7 +1381,7 @@
    1517 1381
                     <property name="can-focus">False</property>
    
    1518 1382
                     <property name="orientation">vertical</property>
    
    1519 1383
                     <child>
    
    1520
    -                  <!-- n-columns=3 n-rows=4 -->
    
    1384
    +                  <!-- n-columns=1 n-rows=4 -->
    
    1521 1385
                       <object class="GtkGrid">
    
    1522 1386
                         <property name="visible">True</property>
    
    1523 1387
                         <property name="can-focus">False</property>
    
    ... ... @@ -1625,30 +1489,6 @@
    1625 1489
                             <property name="top-attach">1</property>
    
    1626 1490
                           </packing>
    
    1627 1491
                         </child>
    
    1628
    -                    <child>
    
    1629
    -                      <placeholder/>
    
    1630
    -                    </child>
    
    1631
    -                    <child>
    
    1632
    -                      <placeholder/>
    
    1633
    -                    </child>
    
    1634
    -                    <child>
    
    1635
    -                      <placeholder/>
    
    1636
    -                    </child>
    
    1637
    -                    <child>
    
    1638
    -                      <placeholder/>
    
    1639
    -                    </child>
    
    1640
    -                    <child>
    
    1641
    -                      <placeholder/>
    
    1642
    -                    </child>
    
    1643
    -                    <child>
    
    1644
    -                      <placeholder/>
    
    1645
    -                    </child>
    
    1646
    -                    <child>
    
    1647
    -                      <placeholder/>
    
    1648
    -                    </child>
    
    1649
    -                    <child>
    
    1650
    -                      <placeholder/>
    
    1651
    -                    </child>
    
    1652 1492
                       </object>
    
    1653 1493
                       <packing>
    
    1654 1494
                         <property name="expand">False</property>
    
    ... ... @@ -1668,7 +1508,7 @@
    1668 1508
                     <property name="can-focus">False</property>
    
    1669 1509
                     <property name="orientation">vertical</property>
    
    1670 1510
                     <child>
    
    1671
    -                  <!-- n-columns=3 n-rows=4 -->
    
    1511
    +                  <!-- n-columns=1 n-rows=4 -->
    
    1672 1512
                       <object class="GtkGrid">
    
    1673 1513
                         <property name="visible">True</property>
    
    1674 1514
                         <property name="can-focus">False</property>
    
    ... ... @@ -1776,30 +1616,6 @@
    1776 1616
                             <property name="top-attach">1</property>
    
    1777 1617
                           </packing>
    
    1778 1618
                         </child>
    
    1779
    -                    <child>
    
    1780
    -                      <placeholder/>
    
    1781
    -                    </child>
    
    1782
    -                    <child>
    
    1783
    -                      <placeholder/>
    
    1784
    -                    </child>
    
    1785
    -                    <child>
    
    1786
    -                      <placeholder/>
    
    1787
    -                    </child>
    
    1788
    -                    <child>
    
    1789
    -                      <placeholder/>
    
    1790
    -                    </child>
    
    1791
    -                    <child>
    
    1792
    -                      <placeholder/>
    
    1793
    -                    </child>
    
    1794
    -                    <child>
    
    1795
    -                      <placeholder/>
    
    1796
    -                    </child>
    
    1797
    -                    <child>
    
    1798
    -                      <placeholder/>
    
    1799
    -                    </child>
    
    1800
    -                    <child>
    
    1801
    -                      <placeholder/>
    
    1802
    -                    </child>
    
    1803 1619
                       </object>
    
    1804 1620
                       <packing>
    
    1805 1621
                         <property name="expand">False</property>
    
    ... ... @@ -1819,7 +1635,7 @@
    1819 1635
                     <property name="can-focus">False</property>
    
    1820 1636
                     <property name="orientation">vertical</property>
    
    1821 1637
                     <child>
    
    1822
    -                  <!-- n-columns=3 n-rows=6 -->
    
    1638
    +                  <!-- n-columns=1 n-rows=6 -->
    
    1823 1639
                       <object class="GtkGrid">
    
    1824 1640
                         <property name="visible">True</property>
    
    1825 1641
                         <property name="can-focus">False</property>
    
    ... ... @@ -1960,42 +1776,6 @@
    1960 1776
                             <property name="top-attach">3</property>
    
    1961 1777
                           </packing>
    
    1962 1778
                         </child>
    
    1963
    -                    <child>
    
    1964
    -                      <placeholder/>
    
    1965
    -                    </child>
    
    1966
    -                    <child>
    
    1967
    -                      <placeholder/>
    
    1968
    -                    </child>
    
    1969
    -                    <child>
    
    1970
    -                      <placeholder/>
    
    1971
    -                    </child>
    
    1972
    -                    <child>
    
    1973
    -                      <placeholder/>
    
    1974
    -                    </child>
    
    1975
    -                    <child>
    
    1976
    -                      <placeholder/>
    
    1977
    -                    </child>
    
    1978
    -                    <child>
    
    1979
    -                      <placeholder/>
    
    1980
    -                    </child>
    
    1981
    -                    <child>
    
    1982
    -                      <placeholder/>
    
    1983
    -                    </child>
    
    1984
    -                    <child>
    
    1985
    -                      <placeholder/>
    
    1986
    -                    </child>
    
    1987
    -                    <child>
    
    1988
    -                      <placeholder/>
    
    1989
    -                    </child>
    
    1990
    -                    <child>
    
    1991
    -                      <placeholder/>
    
    1992
    -                    </child>
    
    1993
    -                    <child>
    
    1994
    -                      <placeholder/>
    
    1995
    -                    </child>
    
    1996
    -                    <child>
    
    1997
    -                      <placeholder/>
    
    1998
    -                    </child>
    
    1999 1779
                       </object>
    
    2000 1780
                       <packing>
    
    2001 1781
                         <property name="expand">False</property>
    
    ... ... @@ -2015,7 +1795,7 @@
    2015 1795
                     <property name="can-focus">False</property>
    
    2016 1796
                     <property name="orientation">vertical</property>
    
    2017 1797
                     <child>
    
    2018
    -                  <!-- n-columns=3 n-rows=3 -->
    
    1798
    +                  <!-- n-columns=1 n-rows=3 -->
    
    2019 1799
                       <object class="GtkGrid">
    
    2020 1800
                         <property name="visible">True</property>
    
    2021 1801
                         <property name="can-focus">False</property>
    
    ... ... @@ -2104,24 +1884,6 @@
    2104 1884
                             <property name="top-attach">2</property>
    
    2105 1885
                           </packing>
    
    2106 1886
                         </child>
    
    2107
    -                    <child>
    
    2108
    -                      <placeholder/>
    
    2109
    -                    </child>
    
    2110
    -                    <child>
    
    2111
    -                      <placeholder/>
    
    2112
    -                    </child>
    
    2113
    -                    <child>
    
    2114
    -                      <placeholder/>
    
    2115
    -                    </child>
    
    2116
    -                    <child>
    
    2117
    -                      <placeholder/>
    
    2118
    -                    </child>
    
    2119
    -                    <child>
    
    2120
    -                      <placeholder/>
    
    2121
    -                    </child>
    
    2122
    -                    <child>
    
    2123
    -                      <placeholder/>
    
    2124
    -                    </child>
    
    2125 1887
                       </object>
    
    2126 1888
                       <packing>
    
    2127 1889
                         <property name="expand">False</property>
    
    ... ... @@ -2141,7 +1903,7 @@
    2141 1903
                     <property name="can-focus">False</property>
    
    2142 1904
                     <property name="orientation">vertical</property>
    
    2143 1905
                     <child>
    
    2144
    -                  <!-- n-columns=3 n-rows=3 -->
    
    1906
    +                  <!-- n-columns=1 n-rows=2 -->
    
    2145 1907
                       <object class="GtkGrid" id="invite_grid">
    
    2146 1908
                         <property name="visible">True</property>
    
    2147 1909
                         <property name="can-focus">False</property>
    
    ... ... @@ -2201,27 +1963,6 @@
    2201 1963
                         <child>
    
    2202 1964
                           <placeholder/>
    
    2203 1965
                         </child>
    
    2204
    -                    <child>
    
    2205
    -                      <placeholder/>
    
    2206
    -                    </child>
    
    2207
    -                    <child>
    
    2208
    -                      <placeholder/>
    
    2209
    -                    </child>
    
    2210
    -                    <child>
    
    2211
    -                      <placeholder/>
    
    2212
    -                    </child>
    
    2213
    -                    <child>
    
    2214
    -                      <placeholder/>
    
    2215
    -                    </child>
    
    2216
    -                    <child>
    
    2217
    -                      <placeholder/>
    
    2218
    -                    </child>
    
    2219
    -                    <child>
    
    2220
    -                      <placeholder/>
    
    2221
    -                    </child>
    
    2222
    -                    <child>
    
    2223
    -                      <placeholder/>
    
    2224
    -                    </child>
    
    2225 1966
                       </object>
    
    2226 1967
                       <packing>
    
    2227 1968
                         <property name="expand">False</property>
    
    ... ... @@ -2241,7 +1982,7 @@
    2241 1982
                     <property name="can-focus">False</property>
    
    2242 1983
                     <property name="orientation">vertical</property>
    
    2243 1984
                     <child>
    
    2244
    -                  <!-- n-columns=3 n-rows=3 -->
    
    1985
    +                  <!-- n-columns=1 n-rows=3 -->
    
    2245 1986
                       <object class="GtkGrid" id="settings_grid">
    
    2246 1987
                         <property name="name">settings_grid</property>
    
    2247 1988
                         <property name="visible">True</property>
    
    ... ... @@ -2330,24 +2071,6 @@
    2330 2071
                             <property name="top-attach">1</property>
    
    2331 2072
                           </packing>
    
    2332 2073
                         </child>
    
    2333
    -                    <child>
    
    2334
    -                      <placeholder/>
    
    2335
    -                    </child>
    
    2336
    -                    <child>
    
    2337
    -                      <placeholder/>
    
    2338
    -                    </child>
    
    2339
    -                    <child>
    
    2340
    -                      <placeholder/>
    
    2341
    -                    </child>
    
    2342
    -                    <child>
    
    2343
    -                      <placeholder/>
    
    2344
    -                    </child>
    
    2345
    -                    <child>
    
    2346
    -                      <placeholder/>
    
    2347
    -                    </child>
    
    2348
    -                    <child>
    
    2349
    -                      <placeholder/>
    
    2350
    -                    </child>
    
    2351 2074
                         <style>
    
    2352 2075
                           <class name="margin-18"/>
    
    2353 2076
                         </style>
    
    ... ... @@ -2431,7 +2154,7 @@
    2431 2154
                       </packing>
    
    2432 2155
                     </child>
    
    2433 2156
                     <child>
    
    2434
    -                  <!-- n-columns=3 n-rows=3 -->
    
    2157
    +                  <!-- n-columns=2 n-rows=2 -->
    
    2435 2158
                       <object class="GtkGrid">
    
    2436 2159
                         <property name="visible">True</property>
    
    2437 2160
                         <property name="can-focus">False</property>
    
    ... ... @@ -2491,21 +2214,6 @@
    2491 2214
                             <property name="top-attach">1</property>
    
    2492 2215
                           </packing>
    
    2493 2216
                         </child>
    
    2494
    -                    <child>
    
    2495
    -                      <placeholder/>
    
    2496
    -                    </child>
    
    2497
    -                    <child>
    
    2498
    -                      <placeholder/>
    
    2499
    -                    </child>
    
    2500
    -                    <child>
    
    2501
    -                      <placeholder/>
    
    2502
    -                    </child>
    
    2503
    -                    <child>
    
    2504
    -                      <placeholder/>
    
    2505
    -                    </child>
    
    2506
    -                    <child>
    
    2507
    -                      <placeholder/>
    
    2508
    -                    </child>
    
    2509 2217
                       </object>
    
    2510 2218
                       <packing>
    
    2511 2219
                         <property name="expand">False</property>
    
    ... ... @@ -2599,7 +2307,7 @@
    2599 2307
                     <property name="can-focus">False</property>
    
    2600 2308
                     <property name="orientation">vertical</property>
    
    2601 2309
                     <child>
    
    2602
    -                  <!-- n-columns=3 n-rows=3 -->
    
    2310
    +                  <!-- n-columns=1 n-rows=3 -->
    
    2603 2311
                       <object class="GtkGrid" id="avatar_selector_grid">
    
    2604 2312
                         <property name="name">settings_grid</property>
    
    2605 2313
                         <property name="visible">True</property>
    
    ... ... @@ -2689,24 +2397,6 @@
    2689 2397
                         <child>
    
    2690 2398
                           <placeholder/>
    
    2691 2399
                         </child>
    
    2692
    -                    <child>
    
    2693
    -                      <placeholder/>
    
    2694
    -                    </child>
    
    2695
    -                    <child>
    
    2696
    -                      <placeholder/>
    
    2697
    -                    </child>
    
    2698
    -                    <child>
    
    2699
    -                      <placeholder/>
    
    2700
    -                    </child>
    
    2701
    -                    <child>
    
    2702
    -                      <placeholder/>
    
    2703
    -                    </child>
    
    2704
    -                    <child>
    
    2705
    -                      <placeholder/>
    
    2706
    -                    </child>
    
    2707
    -                    <child>
    
    2708
    -                      <placeholder/>
    
    2709
    -                    </child>
    
    2710 2400
                       </object>
    
    2711 2401
                       <packing>
    
    2712 2402
                         <property name="expand">False</property>
    

  • gajim/data/gui/groupchat_info_scrolled.ui
    ... ... @@ -2,7 +2,7 @@
    2 2
     <!-- Generated with glade 3.38.2 -->
    
    3 3
     <interface>
    
    4 4
       <requires lib="gtk+" version="3.20"/>
    
    5
    -  <!-- n-columns=3 n-rows=10 -->
    
    5
    +  <!-- n-columns=2 n-rows=10 -->
    
    6 6
       <object class="GtkGrid" id="info_grid">
    
    7 7
         <property name="visible">True</property>
    
    8 8
         <property name="can-focus">False</property>
    
    ... ... @@ -82,6 +82,7 @@
    82 82
             <property name="wrap">True</property>
    
    83 83
             <property name="wrap-mode">word-char</property>
    
    84 84
             <property name="selectable">True</property>
    
    85
    +        <property name="max-width-chars">40</property>
    
    85 86
             <property name="xalign">0</property>
    
    86 87
           </object>
    
    87 88
           <packing>
    
    ... ... @@ -95,6 +96,10 @@
    95 96
             <property name="no-show-all">True</property>
    
    96 97
             <property name="halign">start</property>
    
    97 98
             <property name="valign">start</property>
    
    99
    +        <property name="wrap">True</property>
    
    100
    +        <property name="wrap-mode">word-char</property>
    
    101
    +        <property name="max-width-chars">40</property>
    
    102
    +        <property name="xalign">0</property>
    
    98 103
           </object>
    
    99 104
           <packing>
    
    100 105
             <property name="left-attach">1</property>
    
    ... ... @@ -151,6 +156,9 @@
    151 156
             <property name="no-show-all">True</property>
    
    152 157
             <property name="halign">start</property>
    
    153 158
             <property name="valign">start</property>
    
    159
    +        <property name="wrap">True</property>
    
    160
    +        <property name="max-width-chars">40</property>
    
    161
    +        <property name="xalign">0</property>
    
    154 162
           </object>
    
    155 163
           <packing>
    
    156 164
             <property name="left-attach">1</property>
    
    ... ... @@ -159,7 +167,6 @@
    159 167
         </child>
    
    160 168
         <child>
    
    161 169
           <object class="GtkLinkButton" id="logs">
    
    162
    -        <property name="label" translatable="yes">button</property>
    
    163 170
             <property name="can-focus">True</property>
    
    164 171
             <property name="receives-default">True</property>
    
    165 172
             <property name="no-show-all">True</property>
    
    ... ... @@ -237,6 +244,7 @@
    237 244
             <property name="wrap">True</property>
    
    238 245
             <property name="wrap-mode">word-char</property>
    
    239 246
             <property name="selectable">True</property>
    
    247
    +        <property name="max-width-chars">40</property>
    
    240 248
             <property name="xalign">0</property>
    
    241 249
             <signal name="activate-link" handler="_on_activate_subject_link" swapped="no"/>
    
    242 250
           </object>
    
    ... ... @@ -254,7 +262,7 @@
    254 262
             <property name="selectable">True</property>
    
    255 263
             <property name="ellipsize">end</property>
    
    256 264
             <property name="single-line-mode">True</property>
    
    257
    -        <property name="max-width-chars">40</property>
    
    265
    +        <property name="max-width-chars">30</property>
    
    258 266
             <style>
    
    259 267
               <class name="large-header"/>
    
    260 268
             </style>
    
    ... ... @@ -285,12 +293,13 @@
    285 293
             <property name="spacing">12</property>
    
    286 294
             <child>
    
    287 295
               <object class="GtkLabel" id="address">
    
    288
    -            <property name="width-request">240</property>
    
    296
    +            <property name="width-request">200</property>
    
    289 297
                 <property name="visible">True</property>
    
    290 298
                 <property name="can-focus">False</property>
    
    291 299
                 <property name="halign">start</property>
    
    292 300
                 <property name="selectable">True</property>
    
    293 301
                 <property name="ellipsize">middle</property>
    
    302
    +            <property name="single-line-mode">True</property>
    
    294 303
                 <property name="max-width-chars">30</property>
    
    295 304
                 <property name="xalign">0</property>
    
    296 305
               </object>
    
    ... ... @@ -332,35 +341,5 @@
    332 341
             <property name="top-attach">2</property>
    
    333 342
           </packing>
    
    334 343
         </child>
    
    335
    -    <child>
    
    336
    -      <placeholder/>
    
    337
    -    </child>
    
    338
    -    <child>
    
    339
    -      <placeholder/>
    
    340
    -    </child>
    
    341
    -    <child>
    
    342
    -      <placeholder/>
    
    343
    -    </child>
    
    344
    -    <child>
    
    345
    -      <placeholder/>
    
    346
    -    </child>
    
    347
    -    <child>
    
    348
    -      <placeholder/>
    
    349
    -    </child>
    
    350
    -    <child>
    
    351
    -      <placeholder/>
    
    352
    -    </child>
    
    353
    -    <child>
    
    354
    -      <placeholder/>
    
    355
    -    </child>
    
    356
    -    <child>
    
    357
    -      <placeholder/>
    
    358
    -    </child>
    
    359
    -    <child>
    
    360
    -      <placeholder/>
    
    361
    -    </child>
    
    362
    -    <child>
    
    363
    -      <placeholder/>
    
    364
    -    </child>
    
    365 344
       </object>
    
    366 345
     </interface>

  • gajim/data/gui/groupchat_invite.ui deleted
    1
    -<?xml version="1.0" encoding="UTF-8"?>
    
    2
    -<!-- Generated with glade 3.22.1 -->
    
    3
    -<interface>
    
    4
    -  <requires lib="gtk+" version="3.20"/>
    
    5
    -  <object class="GtkListStore" id="account_store">
    
    6
    -    <columns>
    
    7
    -      <!-- column-name icon -->
    
    8
    -      <column type="GdkPixbuf"/>
    
    9
    -      <!-- column-name account -->
    
    10
    -      <column type="gchararray"/>
    
    11
    -      <!-- column-name account_label -->
    
    12
    -      <column type="gchararray"/>
    
    13
    -    </columns>
    
    14
    -  </object>
    
    15
    -  <object class="GtkBox" id="contacts_placeholder">
    
    16
    -    <property name="visible">True</property>
    
    17
    -    <property name="can_focus">False</property>
    
    18
    -    <property name="halign">center</property>
    
    19
    -    <property name="valign">center</property>
    
    20
    -    <property name="orientation">vertical</property>
    
    21
    -    <property name="spacing">12</property>
    
    22
    -    <child>
    
    23
    -      <object class="GtkImage">
    
    24
    -        <property name="visible">True</property>
    
    25
    -        <property name="can_focus">False</property>
    
    26
    -        <property name="icon_name">avatar-default-symbolic</property>
    
    27
    -        <property name="icon_size">6</property>
    
    28
    -        <style>
    
    29
    -          <class name="dim-label"/>
    
    30
    -        </style>
    
    31
    -      </object>
    
    32
    -      <packing>
    
    33
    -        <property name="expand">False</property>
    
    34
    -        <property name="fill">True</property>
    
    35
    -        <property name="position">0</property>
    
    36
    -      </packing>
    
    37
    -    </child>
    
    38
    -    <child>
    
    39
    -      <object class="GtkLabel">
    
    40
    -        <property name="visible">True</property>
    
    41
    -        <property name="can_focus">False</property>
    
    42
    -        <property name="label" translatable="yes">No contacts left.
    
    43
    -You can also type an XMPP address.</property>
    
    44
    -        <property name="justify">center</property>
    
    45
    -        <property name="wrap">True</property>
    
    46
    -        <property name="max_width_chars">35</property>
    
    47
    -        <style>
    
    48
    -          <class name="dim-label"/>
    
    49
    -        </style>
    
    50
    -      </object>
    
    51
    -      <packing>
    
    52
    -        <property name="expand">False</property>
    
    53
    -        <property name="fill">True</property>
    
    54
    -        <property name="position">1</property>
    
    55
    -      </packing>
    
    56
    -    </child>
    
    57
    -  </object>
    
    58
    -  <object class="GtkGrid" id="invite_grid">
    
    59
    -    <property name="visible">True</property>
    
    60
    -    <property name="can_focus">False</property>
    
    61
    -    <property name="hexpand">True</property>
    
    62
    -    <property name="vexpand">True</property>
    
    63
    -    <property name="row_spacing">6</property>
    
    64
    -    <property name="column_spacing">24</property>
    
    65
    -    <child>
    
    66
    -      <object class="GtkLabel">
    
    67
    -        <property name="visible">True</property>
    
    68
    -        <property name="can_focus">False</property>
    
    69
    -        <property name="label" translatable="yes">Invitees</property>
    
    70
    -        <style>
    
    71
    -          <class name="bold16"/>
    
    72
    -        </style>
    
    73
    -      </object>
    
    74
    -      <packing>
    
    75
    -        <property name="left_attach">1</property>
    
    76
    -        <property name="top_attach">0</property>
    
    77
    -      </packing>
    
    78
    -    </child>
    
    79
    -    <child>
    
    80
    -      <object class="GtkLabel">
    
    81
    -        <property name="visible">True</property>
    
    82
    -        <property name="can_focus">False</property>
    
    83
    -        <property name="label" translatable="yes">Contacts</property>
    
    84
    -        <style>
    
    85
    -          <class name="bold16"/>
    
    86
    -        </style>
    
    87
    -      </object>
    
    88
    -      <packing>
    
    89
    -        <property name="left_attach">0</property>
    
    90
    -        <property name="top_attach">0</property>
    
    91
    -      </packing>
    
    92
    -    </child>
    
    93
    -    <child>
    
    94
    -      <object class="GtkBox">
    
    95
    -        <property name="visible">True</property>
    
    96
    -        <property name="can_focus">False</property>
    
    97
    -        <property name="vexpand">True</property>
    
    98
    -        <property name="orientation">vertical</property>
    
    99
    -        <child>
    
    100
    -          <object class="GtkScrolledWindow" id="invitees">
    
    101
    -            <property name="visible">True</property>
    
    102
    -            <property name="can_focus">True</property>
    
    103
    -            <property name="hexpand">True</property>
    
    104
    -            <property name="hscrollbar_policy">never</property>
    
    105
    -            <property name="shadow_type">in</property>
    
    106
    -            <child>
    
    107
    -              <object class="GtkViewport">
    
    108
    -                <property name="visible">True</property>
    
    109
    -                <property name="can_focus">False</property>
    
    110
    -                <child>
    
    111
    -                  <object class="GtkListBox" id="invitees_listbox">
    
    112
    -                    <property name="name">StartChatListBox</property>
    
    113
    -                    <property name="width_request">300</property>
    
    114
    -                    <property name="visible">True</property>
    
    115
    -                    <property name="can_focus">True</property>
    
    116
    -                    <property name="hexpand">False</property>
    
    117
    -                    <property name="selection_mode">browse</property>
    
    118
    -                  </object>
    
    119
    -                </child>
    
    120
    -              </object>
    
    121
    -            </child>
    
    122
    -          </object>
    
    123
    -          <packing>
    
    124
    -            <property name="expand">True</property>
    
    125
    -            <property name="fill">True</property>
    
    126
    -            <property name="position">0</property>
    
    127
    -          </packing>
    
    128
    -        </child>
    
    129
    -      </object>
    
    130
    -      <packing>
    
    131
    -        <property name="left_attach">1</property>
    
    132
    -        <property name="top_attach">1</property>
    
    133
    -      </packing>
    
    134
    -    </child>
    
    135
    -    <child>
    
    136
    -      <object class="GtkBox">
    
    137
    -        <property name="visible">True</property>
    
    138
    -        <property name="can_focus">False</property>
    
    139
    -        <property name="vexpand">True</property>
    
    140
    -        <property name="orientation">vertical</property>
    
    141
    -        <property name="spacing">6</property>
    
    142
    -        <child>
    
    143
    -          <object class="GtkSearchEntry" id="search_entry">
    
    144
    -            <property name="width_request">300</property>
    
    145
    -            <property name="visible">True</property>
    
    146
    -            <property name="can_focus">True</property>
    
    147
    -            <property name="has_focus">True</property>
    
    148
    -            <property name="is_focus">True</property>
    
    149
    -            <property name="hexpand">True</property>
    
    150
    -            <property name="primary_icon_name">edit-find-symbolic</property>
    
    151
    -            <property name="primary_icon_activatable">False</property>
    
    152
    -            <property name="primary_icon_sensitive">False</property>
    
    153
    -            <property name="placeholder_text" translatable="yes">Search contacts...</property>
    
    154
    -          </object>
    
    155
    -          <packing>
    
    156
    -            <property name="expand">False</property>
    
    157
    -            <property name="fill">True</property>
    
    158
    -            <property name="position">0</property>
    
    159
    -          </packing>
    
    160
    -        </child>
    
    161
    -        <child>
    
    162
    -          <object class="GtkScrolledWindow" id="scrolledwindow">
    
    163
    -            <property name="visible">True</property>
    
    164
    -            <property name="can_focus">True</property>
    
    165
    -            <property name="hscrollbar_policy">never</property>
    
    166
    -            <property name="shadow_type">in</property>
    
    167
    -            <child>
    
    168
    -              <object class="GtkViewport">
    
    169
    -                <property name="visible">True</property>
    
    170
    -                <property name="can_focus">False</property>
    
    171
    -                <child>
    
    172
    -                  <object class="GtkListBox" id="contacts_listbox">
    
    173
    -                    <property name="name">StartChatListBox</property>
    
    174
    -                    <property name="visible">True</property>
    
    175
    -                    <property name="can_focus">True</property>
    
    176
    -                    <property name="vexpand">True</property>
    
    177
    -                    <property name="selection_mode">browse</property>
    
    178
    -                  </object>
    
    179
    -                </child>
    
    180
    -              </object>
    
    181
    -            </child>
    
    182
    -          </object>
    
    183
    -          <packing>
    
    184
    -            <property name="expand">True</property>
    
    185
    -            <property name="fill">True</property>
    
    186
    -            <property name="position">1</property>
    
    187
    -          </packing>
    
    188
    -        </child>
    
    189
    -      </object>
    
    190
    -      <packing>
    
    191
    -        <property name="left_attach">0</property>
    
    192
    -        <property name="top_attach">1</property>
    
    193
    -      </packing>
    
    194
    -    </child>
    
    195
    -  </object>
    
    196
    -  <object class="GtkBox" id="invitees_placeholder">
    
    197
    -    <property name="visible">True</property>
    
    198
    -    <property name="can_focus">False</property>
    
    199
    -    <property name="halign">center</property>
    
    200
    -    <property name="valign">center</property>
    
    201
    -    <property name="orientation">vertical</property>
    
    202
    -    <property name="spacing">12</property>
    
    203
    -    <child>
    
    204
    -      <object class="GtkImage">
    
    205
    -        <property name="visible">True</property>
    
    206
    -        <property name="can_focus">False</property>
    
    207
    -        <property name="icon_name">contact-new-symbolic</property>
    
    208
    -        <property name="icon_size">6</property>
    
    209
    -        <style>
    
    210
    -          <class name="dim-label"/>
    
    211
    -        </style>
    
    212
    -      </object>
    
    213
    -      <packing>
    
    214
    -        <property name="expand">False</property>
    
    215
    -        <property name="fill">True</property>
    
    216
    -        <property name="position">0</property>
    
    217
    -      </packing>
    
    218
    -    </child>
    
    219
    -    <child>
    
    220
    -      <object class="GtkLabel">
    
    221
    -        <property name="visible">True</property>
    
    222
    -        <property name="can_focus">False</property>
    
    223
    -        <property name="label" translatable="yes">Click on contacts you would like to invite to this group chat.</property>
    
    224
    -        <property name="justify">center</property>
    
    225
    -        <property name="wrap">True</property>
    
    226
    -        <property name="max_width_chars">35</property>
    
    227
    -        <style>
    
    228
    -          <class name="dim-label"/>
    
    229
    -        </style>
    
    230
    -      </object>
    
    231
    -      <packing>
    
    232
    -        <property name="expand">False</property>
    
    233
    -        <property name="fill">True</property>
    
    234
    -        <property name="position">1</property>
    
    235
    -      </packing>
    
    236
    -    </child>
    
    237
    -  </object>
    
    238
    -</interface>

  • gajim/data/gui/groupchat_inviter.ui
    1
    +<?xml version="1.0" encoding="UTF-8"?>
    
    2
    +<!-- Generated with glade 3.38.2 -->
    
    3
    +<interface>
    
    4
    +  <requires lib="gtk+" version="3.24"/>
    
    5
    +  <object class="GtkListStore" id="account_store">
    
    6
    +    <columns>
    
    7
    +      <!-- column-name icon -->
    
    8
    +      <column type="GdkPixbuf"/>
    
    9
    +      <!-- column-name account -->
    
    10
    +      <column type="gchararray"/>
    
    11
    +      <!-- column-name account_label -->
    
    12
    +      <column type="gchararray"/>
    
    13
    +    </columns>
    
    14
    +  </object>
    
    15
    +  <object class="GtkBox" id="invite_box">
    
    16
    +    <property name="visible">True</property>
    
    17
    +    <property name="can-focus">False</property>
    
    18
    +    <property name="orientation">vertical</property>
    
    19
    +    <property name="spacing">6</property>
    
    20
    +    <child>
    
    21
    +      <object class="GtkLabel">
    
    22
    +        <property name="visible">True</property>
    
    23
    +        <property name="can-focus">False</property>
    
    24
    +        <property name="label" translatable="yes">Invite Contacts</property>
    
    25
    +        <style>
    
    26
    +          <class name="bold16"/>
    
    27
    +        </style>
    
    28
    +      </object>
    
    29
    +      <packing>
    
    30
    +        <property name="expand">False</property>
    
    31
    +        <property name="fill">True</property>
    
    32
    +        <property name="position">0</property>
    
    33
    +      </packing>
    
    34
    +    </child>
    
    35
    +    <child>
    
    36
    +      <object class="GtkSearchEntry" id="search_entry">
    
    37
    +        <property name="width-request">300</property>
    
    38
    +        <property name="visible">True</property>
    
    39
    +        <property name="can-focus">True</property>
    
    40
    +        <property name="has-focus">True</property>
    
    41
    +        <property name="is-focus">True</property>
    
    42
    +        <property name="hexpand">True</property>
    
    43
    +        <property name="primary-icon-name">edit-find-symbolic</property>
    
    44
    +        <property name="primary-icon-activatable">False</property>
    
    45
    +        <property name="primary-icon-sensitive">False</property>
    
    46
    +        <property name="placeholder-text" translatable="yes">Search contacts...</property>
    
    47
    +      </object>
    
    48
    +      <packing>
    
    49
    +        <property name="expand">False</property>
    
    50
    +        <property name="fill">True</property>
    
    51
    +        <property name="position">1</property>
    
    52
    +      </packing>
    
    53
    +    </child>
    
    54
    +    <child>
    
    55
    +      <object class="GtkScrolledWindow" id="scrolledwindow">
    
    56
    +        <property name="visible">True</property>
    
    57
    +        <property name="can-focus">True</property>
    
    58
    +        <property name="hscrollbar-policy">never</property>
    
    59
    +        <property name="shadow-type">in</property>
    
    60
    +        <property name="min-content-height">100</property>
    
    61
    +        <child>
    
    62
    +          <object class="GtkViewport">
    
    63
    +            <property name="visible">True</property>
    
    64
    +            <property name="can-focus">False</property>
    
    65
    +            <child>
    
    66
    +              <object class="GtkListBox" id="contacts_listbox">
    
    67
    +                <property name="name">StartChatListBox</property>
    
    68
    +                <property name="visible">True</property>
    
    69
    +                <property name="can-focus">True</property>
    
    70
    +                <property name="vexpand">True</property>
    
    71
    +                <property name="selection-mode">browse</property>
    
    72
    +                <child type="placeholder">
    
    73
    +                  <object class="GtkBox" id="contacts_placeholder">
    
    74
    +                    <property name="visible">True</property>
    
    75
    +                    <property name="can-focus">False</property>
    
    76
    +                    <property name="halign">center</property>
    
    77
    +                    <property name="valign">center</property>
    
    78
    +                    <property name="orientation">vertical</property>
    
    79
    +                    <property name="spacing">12</property>
    
    80
    +                    <child>
    
    81
    +                      <object class="GtkImage">
    
    82
    +                        <property name="visible">True</property>
    
    83
    +                        <property name="can-focus">False</property>
    
    84
    +                        <property name="icon-name">avatar-default-symbolic</property>
    
    85
    +                        <property name="icon_size">6</property>
    
    86
    +                        <style>
    
    87
    +                          <class name="dim-label"/>
    
    88
    +                        </style>
    
    89
    +                      </object>
    
    90
    +                      <packing>
    
    91
    +                        <property name="expand">False</property>
    
    92
    +                        <property name="fill">True</property>
    
    93
    +                        <property name="position">0</property>
    
    94
    +                      </packing>
    
    95
    +                    </child>
    
    96
    +                    <child>
    
    97
    +                      <object class="GtkLabel">
    
    98
    +                        <property name="visible">True</property>
    
    99
    +                        <property name="can-focus">False</property>
    
    100
    +                        <property name="label" translatable="yes">No contacts left.
    
    101
    +You can also type an XMPP address.</property>
    
    102
    +                        <property name="justify">center</property>
    
    103
    +                        <property name="wrap">True</property>
    
    104
    +                        <property name="max-width-chars">35</property>
    
    105
    +                        <style>
    
    106
    +                          <class name="dim-label"/>
    
    107
    +                        </style>
    
    108
    +                      </object>
    
    109
    +                      <packing>
    
    110
    +                        <property name="expand">False</property>
    
    111
    +                        <property name="fill">True</property>
    
    112
    +                        <property name="position">1</property>
    
    113
    +                      </packing>
    
    114
    +                    </child>
    
    115
    +                  </object>
    
    116
    +                </child>
    
    117
    +              </object>
    
    118
    +            </child>
    
    119
    +          </object>
    
    120
    +        </child>
    
    121
    +      </object>
    
    122
    +      <packing>
    
    123
    +        <property name="expand">True</property>
    
    124
    +        <property name="fill">True</property>
    
    125
    +        <property name="position">2</property>
    
    126
    +      </packing>
    
    127
    +    </child>
    
    128
    +    <child>
    
    129
    +      <object class="GtkLabel">
    
    130
    +        <property name="visible">True</property>
    
    131
    +        <property name="can-focus">False</property>
    
    132
    +        <property name="margin-top">6</property>
    
    133
    +        <property name="label" translatable="yes">Invitees</property>
    
    134
    +        <style>
    
    135
    +          <class name="bold"/>
    
    136
    +        </style>
    
    137
    +      </object>
    
    138
    +      <packing>
    
    139
    +        <property name="expand">False</property>
    
    140
    +        <property name="fill">True</property>
    
    141
    +        <property name="position">3</property>
    
    142
    +      </packing>
    
    143
    +    </child>
    
    144
    +    <child>
    
    145
    +      <object class="GtkLabel">
    
    146
    +        <property name="visible">True</property>
    
    147
    +        <property name="can-focus">False</property>
    
    148
    +        <property name="label" translatable="yes">Click on contacts you would like to invite to this group chat.</property>
    
    149
    +        <property name="justify">center</property>
    
    150
    +        <property name="wrap">True</property>
    
    151
    +        <property name="max-width-chars">42</property>
    
    152
    +        <style>
    
    153
    +          <class name="dim-label"/>
    
    154
    +        </style>
    
    155
    +      </object>
    
    156
    +      <packing>
    
    157
    +        <property name="expand">False</property>
    
    158
    +        <property name="fill">True</property>
    
    159
    +        <property name="position">4</property>
    
    160
    +      </packing>
    
    161
    +    </child>
    
    162
    +    <child>
    
    163
    +      <object class="GtkScrolledWindow" id="invitees_scrolled">
    
    164
    +        <property name="visible">True</property>
    
    165
    +        <property name="can-focus">True</property>
    
    166
    +        <property name="shadow-type">in</property>
    
    167
    +        <property name="min-content-height">100</property>
    
    168
    +        <child>
    
    169
    +          <placeholder/>
    
    170
    +        </child>
    
    171
    +      </object>
    
    172
    +      <packing>
    
    173
    +        <property name="expand">False</property>
    
    174
    +        <property name="fill">True</property>
    
    175
    +        <property name="position">5</property>
    
    176
    +      </packing>
    
    177
    +    </child>
    
    178
    +  </object>
    
    179
    +</interface>

  • gajim/data/style/gajim.css
    ... ... @@ -635,6 +635,20 @@ .start-chat-row { padding: 10px 20px 10px 10px; }
    635 635
     .start-chat-row:not(.activatable) label { color: @insensitive_fg_color; }
    
    636 636
     .start-chat-row:focus { outline: none; }
    
    637 637
     
    
    638
    +/* ContactFlowBox */
    
    639
    +.contact-flowbox-item {
    
    640
    +    background-color: alpha(@borders, 0.4);
    
    641
    +    border-radius: 12px;
    
    642
    +    padding: 6px;
    
    643
    +}
    
    644
    +.contact-flowbox-item button {
    
    645
    +    background: none;
    
    646
    +    border: 1px solid alpha(@borders, 0.4);
    
    647
    +}
    
    648
    +.contact-flowbox-item button:hover {
    
    649
    +    border: 1px solid @borders;
    
    650
    +}
    
    651
    +
    
    638 652
     /* GroupChatRoster */
    
    639 653
     .groupchat-roster { border-left: 1px solid;
    
    640 654
                         border-color: @borders; }
    

  • gajim/gtk/add_contact.py
    ... ... @@ -477,7 +477,7 @@ def __init__(self) -> None:
    477 477
             heading.set_justify(Gtk.Justification.CENTER)
    
    478 478
             self.pack_start(heading, False, True, 0)
    
    479 479
     
    
    480
    -        self._info_box = GroupChatInfoScrolled(options={'minimal': True})
    
    480
    +        self._info_box = GroupChatInfoScrolled(minimal=True)
    
    481 481
             self.pack_start(self._info_box, True, True, 0)
    
    482 482
     
    
    483 483
             self.show_all()
    

  • gajim/gtk/contacts_flowbox.py
    1
    +#
    
    2
    +# Gajim is free software; you can redistribute it and/or modify
    
    3
    +# it under the terms of the GNU General Public License as published
    
    4
    +# by the Free Software Foundation; version 3 only.
    
    5
    +#
    
    6
    +# Gajim is distributed in the hope that it will be useful,
    
    7
    +# but WITHOUT ANY WARRANTY; without even the implied warranty of
    
    8
    +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
    
    9
    +# GNU General Public License for more details.
    
    10
    +#
    
    11
    +# You should have received a copy of the GNU General Public License
    
    12
    +# along with Gajim. If not, see <http://www.gnu.org/licenses/>.
    
    13
    +
    
    14
    +from typing import List
    
    15
    +
    
    16
    +from gi.repository import GObject
    
    17
    +from gi.repository import Gtk
    
    18
    +from gi.repository import Pango
    
    19
    +
    
    20
    +from gajim.common import app
    
    21
    +from gajim.common.const import AvatarSize
    
    22
    +from gajim.common.i18n import _
    
    23
    +
    
    24
    +
    
    25
    +class ContactItem(Gtk.FlowBoxChild):
    
    26
    +    def __init__(self, account: str, jid: str) -> None:
    
    27
    +        Gtk.FlowBoxChild.__init__(self)
    
    28
    +        self.set_size_request(150, -1)
    
    29
    +
    
    30
    +        self.account = account
    
    31
    +        self.jid = jid
    
    32
    +
    
    33
    +        client = app.get_client(account)
    
    34
    +        contact = client.get_module('Contacts').get_contact(jid)
    
    35
    +
    
    36
    +        surface = contact.get_avatar(
    
    37
    +            AvatarSize.ROSTER, self.get_scale_factor())
    
    38
    +        avatar_image = Gtk.Image.new_from_surface(surface)
    
    39
    +
    
    40
    +        name_label = Gtk.Label(label=contact.name)
    
    41
    +        name_label.set_tooltip_text(contact.name)
    
    42
    +        name_label.set_ellipsize(Pango.EllipsizeMode.END)
    
    43
    +        name_label.set_max_width_chars(12)
    
    44
    +        name_label.get_style_context().add_class('bold')
    
    45
    +
    
    46
    +        remove_button = Gtk.Button.new_from_icon_name(
    
    47
    +            'window-close', Gtk.IconSize.BUTTON)
    
    48
    +        remove_button.set_valign(Gtk.Align.CENTER)
    
    49
    +        remove_button.set_halign(Gtk.Align.END)
    
    50
    +        remove_button.set_hexpand(True)
    
    51
    +        remove_button.set_relief(Gtk.ReliefStyle.NONE)
    
    52
    +        remove_button.set_tooltip_text(_('Remove'))
    
    53
    +        remove_button.connect('clicked', self._on_remove)
    
    54
    +
    
    55
    +        box = Gtk.Box(spacing=6)
    
    56
    +        box.set_valign(Gtk.Align.CENTER)
    
    57
    +        box.add(avatar_image)
    
    58
    +        box.add(name_label)
    
    59
    +        box.add(remove_button)
    
    60
    +        box.get_style_context().add_class('contact-flowbox-item')
    
    61
    +        self.add(box)
    
    62
    +        self.show_all()
    
    63
    +
    
    64
    +    def _on_remove(self, _button: Gtk.Button) -> None:
    
    65
    +        self.get_parent().on_contact_removed(self)
    
    66
    +
    
    67
    +
    
    68
    +class ContactsFlowBox(Gtk.FlowBox):
    
    69
    +
    
    70
    +    __gsignals__ = {
    
    71
    +        'contact-removed': (GObject.SignalFlags.RUN_LAST, None, (str, str))
    
    72
    +    }
    
    73
    +
    
    74
    +    def __init__(self) -> None:
    
    75
    +        Gtk.FlowBox.__init__(self)
    
    76
    +        self.set_column_spacing(6)
    
    77
    +        self.set_row_spacing(3)
    
    78
    +        self.set_selection_mode(Gtk.SelectionMode.NONE)
    
    79
    +        self.set_valign(Gtk.Align.START)
    
    80
    +        self.show_all()
    
    81
    +
    
    82
    +    def clear(self) -> None:
    
    83
    +        def _remove(item):
    
    84
    +            self.remove(item)
    
    85
    +            item.destroy()
    
    86
    +        self.foreach(_remove)
    
    87
    +
    
    88
    +    def add_contact(self, account: str, jid: str) -> None:
    
    89
    +        contact_item = ContactItem(account, jid)
    
    90
    +        self.add(contact_item)
    
    91
    +
    
    92
    +    def has_contacts(self) -> bool:
    
    93
    +        return bool(self.get_child_at_index(0) is not None)
    
    94
    +
    
    95
    +    def get_contact_jids(self) -> List[str]:
    
    96
    +        contacts = []
    
    97
    +        for contact in self.get_children():
    
    98
    +            contacts.append(contact.jid)
    
    99
    +        return contacts
    
    100
    +
    
    101
    +    def on_contact_removed(self, row: ContactItem) -> None:
    
    102
    +        account = row.account
    
    103
    +        jid = row.jid
    
    104
    +        row.destroy()
    
    105
    +        self.emit('contact-removed', account, jid)

  • gajim/gtk/controls/groupchat.py
    ... ... @@ -75,7 +75,7 @@
    75 75
     from gajim.gui.avatar_selector import AvatarSelector
    
    76 76
     from gajim.gui.dataform import DataFormWidget
    
    77 77
     from gajim.gui.groupchat_info import GroupChatInfoScrolled
    
    78
    -from gajim.gui.groupchat_invite import GroupChatInvite
    
    78
    +from gajim.gui.groupchat_inviter import GroupChatInviter
    
    79 79
     from gajim.gui.groupchat_settings import GroupChatSettings
    
    80 80
     from gajim.gui.groupchat_roster import GroupchatRoster
    
    81 81
     from gajim.gui.groupchat_state import GroupchatState
    
    ... ... @@ -166,7 +166,7 @@ def __init__(self, account: str, jid: JID) -> None:
    166 166
     
    
    167 167
             # MUC Info
    
    168 168
             self._subject_data = None
    
    169
    -        self._muc_info_box = GroupChatInfoScrolled(self.account, {'width': 600})
    
    169
    +        self._muc_info_box = GroupChatInfoScrolled(self.account)
    
    170 170
             self.xml.info_box.add(self._muc_info_box)
    
    171 171
     
    
    172 172
             # Groupchat settings
    
    ... ... @@ -180,7 +180,7 @@ def __init__(self, account: str, jid: JID) -> None:
    180 180
             self.xml.quick_invite_button.set_action_name(
    
    181 181
                 f'win.invite-{self.control_id}')
    
    182 182
     
    
    183
    -        self._invite_box = GroupChatInvite(self.room_jid)
    
    183
    +        self._invite_box = GroupChatInviter(self.room_jid)
    
    184 184
             self.xml.invite_grid.attach(self._invite_box, 0, 0, 1, 1)
    
    185 185
             self._invite_box.connect('listbox-changed', self._on_invite_ready)
    
    186 186
     
    

  • gajim/gtk/groupchat_info.py
    ... ... @@ -12,8 +12,6 @@
    12 12
     # You should have received a copy of the GNU General Public License
    
    13 13
     # along with Gajim. If not, see <http://www.gnu.org/licenses/>.
    
    14 14
     
    
    15
    -from typing import Any
    
    16
    -from typing import Dict
    
    17 15
     from typing import List
    
    18 16
     from typing import Optional
    
    19 17
     
    
    ... ... @@ -106,21 +104,21 @@
    106 104
     class GroupChatInfoScrolled(Gtk.ScrolledWindow):
    
    107 105
         def __init__(self,
    
    108 106
                      account: Optional[str] = None,
    
    109
    -                 options: Optional[Dict[str, Any]] = None
    
    107
    +                 width: Optional[int] = 300,
    
    108
    +                 minimal: Optional[bool] = False
    
    110 109
                      ) -> None:
    
    111 110
             Gtk.ScrolledWindow.__init__(self)
    
    112
    -        if options is None:
    
    113
    -            options = {}
    
    114
    -
    
    115
    -        self._minimal = options.get('minimal', False)
    
    116
    -
    
    117
    -        self.set_size_request(options.get('width', 400), -1)
    
    111
    +        self.set_size_request(width, -1)
    
    118 112
             self.set_halign(Gtk.Align.CENTER)
    
    119 113
     
    
    120
    -        if self._minimal:
    
    114
    +        self._minimal = minimal
    
    115
    +
    
    116
    +        if minimal:
    
    121 117
                 self.set_policy(Gtk.PolicyType.NEVER, Gtk.PolicyType.NEVER)
    
    122 118
             else:
    
    123 119
                 self.set_vexpand(True)
    
    120
    +            self.set_hexpand(True)
    
    121
    +            self.set_propagate_natural_width(True)
    
    124 122
                 self.set_min_content_height(400)
    
    125 123
                 self.set_policy(Gtk.PolicyType.NEVER,
    
    126 124
                                 Gtk.PolicyType.AUTOMATIC)
    

  • gajim/gtk/groupchat_invitation.py
    ... ... @@ -44,7 +44,7 @@ def __init__(self, account, event):
    44 44
             main_box.set_valign(Gtk.Align.FILL)
    
    45 45
             main_box.get_style_context().add_class('padding-18')
    
    46 46
     
    
    47
    -        muc_info_box = GroupChatInfoScrolled(account, {'minimal': True})
    
    47
    +        muc_info_box = GroupChatInfoScrolled(account, minimal=True)
    
    48 48
             muc_info_box.set_from_disco_info(event.info)
    
    49 49
             main_box.add(muc_info_box)
    
    50 50
     
    

  • gajim/gtk/groupchat_invite.py → gajim/gtk/groupchat_inviter.py
    ... ... @@ -12,6 +12,10 @@
    12 12
     # You should have received a copy of the GNU General Public License
    
    13 13
     # along with Gajim. If not, see <http://www.gnu.org/licenses/>.
    
    14 14
     
    
    15
    +from __future__ import annotations
    
    16
    +from typing import List
    
    17
    +from typing import Optional
    
    18
    +
    
    15 19
     import locale
    
    16 20
     
    
    17 21
     from gi.repository import Gdk
    
    ... ... @@ -21,66 +25,154 @@
    21 25
     from gi.repository import Pango
    
    22 26
     
    
    23 27
     from gajim.common import app
    
    28
    +from gajim.common import types
    
    24 29
     from gajim.common.i18n import _
    
    25 30
     from gajim.common.const import AvatarSize
    
    31
    +from gajim.common.const import Direction
    
    26 32
     from gajim.common.helpers import validate_jid
    
    27 33
     
    
    28 34
     from .builder import get_builder
    
    35
    +from .contacts_flowbox import ContactsFlowBox
    
    29 36
     from .util import AccountBadge
    
    30 37
     
    
    31 38
     
    
    32
    -class GroupChatInvite(Gtk.Box):
    
    39
    +class ContactRow(Gtk.ListBoxRow):
    
    40
    +    def __init__(self,
    
    41
    +                 account: str,
    
    42
    +                 contact: Optional[types.BareContact],
    
    43
    +                 jid: str,
    
    44
    +                 name: str,
    
    45
    +                 show_account: bool
    
    46
    +                 ) -> None:
    
    47
    +        Gtk.ListBoxRow.__init__(self)
    
    48
    +        self.get_style_context().add_class('start-chat-row')
    
    49
    +        self.account = account
    
    50
    +        self.jid = jid
    
    51
    +
    
    52
    +        self._contact = contact
    
    53
    +        self._name = name
    
    54
    +        self._show_account = show_account
    
    55
    +
    
    56
    +        self._account_label = app.get_account_label(account)
    
    57
    +        self.is_new: bool = jid == ''
    
    58
    +
    
    59
    +        grid = Gtk.Grid()
    
    60
    +        grid.set_column_spacing(12)
    
    61
    +        grid.set_size_request(260, -1)
    
    62
    +
    
    63
    +        image = self._get_avatar_image(contact)
    
    64
    +        image.set_size_request(AvatarSize.ROSTER, AvatarSize.ROSTER)
    
    65
    +        grid.add(image)
    
    66
    +
    
    67
    +        box = Gtk.Box(orientation=Gtk.Orientation.VERTICAL, spacing=0)
    
    68
    +        box.set_hexpand(True)
    
    69
    +
    
    70
    +        if self._name is None:
    
    71
    +            self._name = _('Invite New Contact')
    
    72
    +
    
    73
    +        self._name_label = Gtk.Label(label=self._name)
    
    74
    +        self._name_label.set_ellipsize(Pango.EllipsizeMode.END)
    
    75
    +        self._name_label.set_xalign(0)
    
    76
    +        self._name_label.set_width_chars(20)
    
    77
    +        self._name_label.set_halign(Gtk.Align.START)
    
    78
    +        self._name_label.get_style_context().add_class('bold16')
    
    79
    +        name_box = Gtk.Box(orientation=Gtk.Orientation.HORIZONTAL, spacing=6)
    
    80
    +        name_box.add(self._name_label)
    
    81
    +
    
    82
    +        if show_account:
    
    83
    +            account_badge = AccountBadge(account)
    
    84
    +            account_badge.set_halign(Gtk.Align.END)
    
    85
    +            account_badge.set_valign(Gtk.Align.START)
    
    86
    +            account_badge.set_hexpand(True)
    
    87
    +            name_box.add(account_badge)
    
    88
    +        box.add(name_box)
    
    89
    +
    
    90
    +        self._jid_label = Gtk.Label(label=str(jid))
    
    91
    +        self._jid_label.set_tooltip_text(str(jid))
    
    92
    +        self._jid_label.set_ellipsize(Pango.EllipsizeMode.END)
    
    93
    +        self._jid_label.set_xalign(0)
    
    94
    +        self._jid_label.set_width_chars(22)
    
    95
    +        self._jid_label.set_halign(Gtk.Align.START)
    
    96
    +        self._jid_label.get_style_context().add_class('dim-label')
    
    97
    +        box.add(self._jid_label)
    
    98
    +
    
    99
    +        grid.add(box)
    
    100
    +
    
    101
    +        self.add(grid)
    
    102
    +        self.show_all()
    
    103
    +
    
    104
    +    def _get_avatar_image(self, contact: types.BareContact) -> Gtk.Image:
    
    105
    +        if self.is_new:
    
    106
    +            icon_name = 'avatar-default'
    
    107
    +            return Gtk.Image.new_from_icon_name(icon_name, Gtk.IconSize.DND)
    
    108
    +
    
    109
    +        scale = self.get_scale_factor()
    
    110
    +        surface = contact.get_avatar(AvatarSize.ROSTER, scale)
    
    111
    +        return Gtk.Image.new_from_surface(surface)
    
    112
    +
    
    113
    +    def update_jid(self, jid: str) -> None:
    
    114
    +        self.jid = jid
    
    115
    +        self._jid_label.set_text(jid)
    
    116
    +
    
    117
    +    def get_search_text(self):
    
    118
    +        if self._contact is None:
    
    119
    +            return str(self.jid)
    
    120
    +        if self._show_account:
    
    121
    +            return f'{self._name} {self.jid} {self._account_label}'
    
    122
    +        return f'{self._name} {self.jid}'
    
    123
    +
    
    124
    +
    
    125
    +class GroupChatInviter(Gtk.Box):
    
    33 126
         __gsignals__ = {
    
    34 127
             'listbox-changed': (GObject.SignalFlags.RUN_LAST, None, (bool,))
    
    35 128
         }
    
    36 129
     
    
    37
    -    def __init__(self, room_jid):
    
    130
    +    def __init__(self, room_jid: str) -> None:
    
    38 131
             Gtk.Box.__init__(self)
    
    39
    -        self.set_size_request(-1, 300)
    
    40
    -        self._ui = get_builder('groupchat_invite.ui')
    
    41
    -        self.add(self._ui.invite_grid)
    
    132
    +        self.set_size_request(-1, 250)
    
    133
    +        self._ui = get_builder('groupchat_inviter.ui')
    
    134
    +        self.add(self._ui.invite_box)
    
    135
    +
    
    136
    +        self._invitees_box = ContactsFlowBox()
    
    137
    +        self._invitees_box.connect('contact-removed', self._on_invitee_removed)
    
    138
    +        self._ui.invitees_scrolled.add(self._invitees_box)
    
    42 139
     
    
    43 140
             self._ui.contacts_listbox.set_filter_func(self._filter_func, None)
    
    44 141
             self._ui.contacts_listbox.set_sort_func(self._sort_func, None)
    
    45
    -        self._ui.contacts_listbox.set_placeholder(self._ui.contacts_placeholder)
    
    46
    -        self._ui.contacts_listbox.connect('row-activated',
    
    47
    -                                          self._on_contacts_row_activated)
    
    142
    +        self._ui.contacts_listbox.connect(
    
    143
    +            'row-activated', self._on_contacts_row_activated)
    
    48 144
     
    
    49
    -        self._ui.invitees_listbox.set_sort_func(self._sort_func, None)
    
    50
    -        self._ui.invitees_listbox.set_placeholder(
    
    51
    -            self._ui.invitees_placeholder)
    
    52
    -        self._ui.invitees_listbox.connect('row-activated',
    
    53
    -                                          self._on_invitees_row_activated)
    
    145
    +        self._room_jid = room_jid
    
    54 146
     
    
    55 147
             self._new_contact_row_visible = False
    
    56
    -        self._room_jid = room_jid
    
    148
    +        self._new_contact_rows: dict[str, Optional[ContactRow]] = {}
    
    149
    +        self._accounts: list[list[str]] = []
    
    57 150
     
    
    58
    -        self._ui.search_entry.connect('search-changed',
    
    59
    -                                      self._on_search_changed)
    
    60
    -        self._ui.search_entry.connect('next-match',
    
    61
    -                                      self._select_new_match, 'next')
    
    62
    -        self._ui.search_entry.connect('previous-match',
    
    63
    -                                      self._select_new_match, 'prev')
    
    151
    +        self._ui.search_entry.connect(
    
    152
    +            'search-changed', self._on_search_changed)
    
    153
    +        self._ui.search_entry.connect(
    
    154
    +            'next-match', self._select_new_match, Direction.NEXT)
    
    155
    +        self._ui.search_entry.connect(
    
    156
    +            'previous-match', self._select_new_match, Direction.PREV)
    
    64 157
             self._ui.search_entry.connect(
    
    65 158
                 'stop-search', lambda *args: self._ui.search_entry.set_text(''))
    
    66
    -        self._ui.search_entry.connect('activate',
    
    67
    -                                      self._on_search_activate)
    
    159
    +        self._ui.search_entry.connect(
    
    160
    +            'activate', self._on_search_activate)
    
    68 161
             self.connect('key-press-event', self._on_key_press)
    
    69 162
             self._ui.connect_signals(self)
    
    70 163
     
    
    71 164
             self.show_all()
    
    72 165
     
    
    73
    -    def _add_accounts(self):
    
    166
    +    def _add_accounts(self) -> None:
    
    74 167
             for account in self._accounts:
    
    75 168
                 self._ui.account_store.append([None, *account])
    
    76 169
     
    
    77
    -    def _add_contacts(self):
    
    170
    +    def _add_contacts(self) -> None:
    
    78 171
             show_account = len(self._accounts) > 1
    
    79 172
             for account, _label in self._accounts:
    
    80
    -            self.new_contact_rows[account] = None
    
    173
    +            self._new_contact_rows[account] = None
    
    81 174
                 client = app.get_client(account)
    
    82 175
                 for contact in client.get_module('Roster').iter_contacts():
    
    83
    -
    
    84 176
                     # Exclude group chats
    
    85 177
                     if contact.is_groupchat:
    
    86 178
                         continue
    
    ... ... @@ -88,12 +180,18 @@ def _add_contacts(self):
    88 180
                     if contact.jid == client.get_own_jid().bare:
    
    89 181
                         continue
    
    90 182
     
    
    91
    -                row = ContactRow(account, contact, contact.jid,
    
    92
    -                                 contact.name, show_account)
    
    183
    +                row = ContactRow(account,
    
    184
    +                                 contact,
    
    185
    +                                 str(contact.jid),
    
    186
    +                                 contact.name,
    
    187
    +                                 show_account)
    
    93 188
                     self._ui.contacts_listbox.add(row)
    
    94 189
     
    
    95
    -    def _on_contacts_row_activated(self, listbox, row):
    
    96
    -        if row.new:
    
    190
    +    def _on_contacts_row_activated(self,
    
    191
    +                                   listbox: Gtk.ListBox,
    
    192
    +                                   row: Gtk.ListBoxRow
    
    193
    +                                   ) -> None:
    
    194
    +        if row.is_new:
    
    97 195
                 jid = row.jid
    
    98 196
                 try:
    
    99 197
                     validate_jid(jid)
    
    ... ... @@ -104,35 +202,42 @@ def _on_contacts_row_activated(self, listbox, row):
    104 202
                     self._ui.search_entry.set_icon_tooltip_text(
    
    105 203
                         Gtk.EntryIconPosition.SECONDARY, str(error))
    
    106 204
                     return
    
    205
    +
    
    107 206
                 self._ui.search_entry.set_icon_from_icon_name(
    
    108 207
                     Gtk.EntryIconPosition.SECONDARY, None)
    
    109
    -            show_account = len(self._accounts) > 1
    
    110
    -            row = ContactRow(
    
    111
    -                row.account, None, '', None, show_account)
    
    112
    -            row.update_jid(jid)
    
    113
    -            self._remove_new_jid_row()
    
    114
    -        else:
    
    208
    +            self._remove_new_contact_row()
    
    209
    +
    
    210
    +        self._invitees_box.add_contact(row.account, row.jid)
    
    211
    +
    
    212
    +        if not row.is_new:
    
    115 213
                 listbox.remove(row)
    
    116
    -        self._ui.invitees_listbox.add(row)
    
    117
    -        self._ui.invitees_listbox.unselect_row(row)
    
    118
    -        self._ui.search_entry.set_text('')
    
    214
    +            row.destroy()
    
    119 215
     
    
    216
    +        self._ui.search_entry.set_text('')
    
    120 217
             GLib.timeout_add(50, self._select_first_row)
    
    121 218
             self._ui.search_entry.grab_focus()
    
    122 219
     
    
    123
    -        invitable = self._ui.invitees_listbox.get_row_at_index(0) is not None
    
    220
    +        invitable = self._invitees_box.has_contacts()
    
    124 221
             self.emit('listbox-changed', invitable)
    
    125 222
     
    
    126
    -    def _on_invitees_row_activated(self, listbox, row):
    
    127
    -        listbox.remove(row)
    
    128
    -        if not row.new:
    
    129
    -            self._ui.contacts_listbox.add(row)
    
    130
    -            self._ui.contacts_listbox.unselect_row(row)
    
    223
    +    def _on_invitee_removed(self,
    
    224
    +                            flowbox: ContactsFlowBox,
    
    225
    +                            account: str,
    
    226
    +                            jid: str
    
    227
    +                            ) -> None:
    
    228
    +        show_account = len(self._accounts) > 1
    
    229
    +        client = app.get_client(account)
    
    230
    +        contact = client.get_module('Contacts').get_contact(jid)
    
    231
    +        row = ContactRow(account,
    
    232
    +                         contact,
    
    233
    +                         str(contact.jid),
    
    234
    +                         contact.name,
    
    235
    +                         show_account)
    
    236
    +        self._ui.contacts_listbox.add(row)
    
    131 237
             self._ui.search_entry.grab_focus()
    
    132
    -        invitable = listbox.get_row_at_index(0) is not None
    
    133
    -        self.emit('listbox-changed', invitable)
    
    238
    +        self.emit('listbox-changed', flowbox.has_contacts())
    
    134 239
     
    
    135
    -    def _on_key_press(self, _widget, event):
    
    240
    +    def _on_key_press(self, _widget: Gtk.Widget, event: Gdk.EventKey) -> int:
    
    136 241
             if event.keyval == Gdk.KEY_Down:
    
    137 242
                 self._ui.search_entry.emit('next-match')
    
    138 243
                 return Gdk.EVENT_STOP
    
    ... ... @@ -151,50 +256,59 @@ def _on_key_press(self, _widget, event):
    151 256
     
    
    152 257
             return Gdk.EVENT_PROPAGATE
    
    153 258
     
    
    154
    -    def _on_search_activate(self, _entry):
    
    259
    +    def _on_search_activate(self, _entry: Gtk.SearchEntry) -> None:
    
    155 260
             row = self._ui.contacts_listbox.get_selected_row()
    
    156 261
             if row is not None and row.get_child_visible():
    
    157 262
                 row.emit('activate')
    
    158 263
     
    
    159
    -    def _on_search_changed(self, entry):
    
    264
    +    def _on_search_changed(self, entry: Gtk.SearchEntry) -> None:
    
    160 265
             search_text = entry.get_text()
    
    161 266
             if '@' in search_text:
    
    162
    -            self._add_new_jid_row()
    
    163
    -            self._update_new_jid_rows(search_text)
    
    267
    +            self._add_new_contact_row()
    
    268
    +            self._update_new_contact_rows(search_text)
    
    164 269
             else:
    
    165
    -            self._remove_new_jid_row()
    
    270
    +            self._remove_new_contact_row()
    
    166 271
             self._ui.contacts_listbox.invalidate_filter()
    
    167 272
     
    
    168
    -    def _add_new_jid_row(self):
    
    273
    +    def _add_new_contact_row(self) -> None:
    
    169 274
             if self._new_contact_row_visible:
    
    170 275
                 return
    
    171
    -        for account in self.new_contact_rows:
    
    276
    +
    
    277
    +        for account in self._new_contact_rows:
    
    172 278
                 show_account = len(self._accounts) > 1
    
    173
    -            row = ContactRow(account, None, '', None, show_account)
    
    174
    -            self.new_contact_rows[account] = row
    
    279
    +            row = ContactRow(account,
    
    280
    +                             None,
    
    281
    +                             '',
    
    282
    +                             None,
    
    283
    +                             show_account)
    
    284
    +            self._new_contact_rows[account] = row
    
    175 285
                 self._ui.contacts_listbox.add(row)
    
    176 286
                 row.get_parent().show_all()
    
    177 287
             self._new_contact_row_visible = True
    
    178 288
     
    
    179
    -    def _remove_new_jid_row(self):
    
    289
    +    def _remove_new_contact_row(self) -> None:
    
    180 290
             if not self._new_contact_row_visible:
    
    181 291
                 return
    
    182
    -        for row in self.new_contact_rows.values():
    
    292
    +
    
    293
    +        for row in self._new_contact_rows.values():
    
    183 294
                 self._ui.contacts_listbox.remove(row)
    
    184 295
             self._new_contact_row_visible = False
    
    185 296
     
    
    186
    -    def _update_new_jid_rows(self, search_text):
    
    187
    -        for row in self.new_contact_rows.values():
    
    297
    +    def _update_new_contact_rows(self, search_text: str) -> None:
    
    298
    +        for row in self._new_contact_rows.values():
    
    188 299
                 row.update_jid(search_text)
    
    189 300
     
    
    190
    -    def _select_new_match(self, _entry, direction):
    
    301
    +    def _select_new_match(self,
    
    302
    +                          _entry: Gtk.SearchEntry,
    
    303
    +                          direction: Direction
    
    304
    +                          ) -> None:
    
    191 305
             selected_row = self._ui.contacts_listbox.get_selected_row()
    
    192 306
             if selected_row is None:
    
    193 307
                 return
    
    194 308
     
    
    195 309
             index = selected_row.get_index()
    
    196 310
     
    
    197
    -        if direction == 'next':
    
    311
    +        if direction == Direction.NEXT:
    
    198 312
                 index += 1
    
    199 313
             else:
    
    200 314
                 index -= 1
    
    ... ... @@ -207,31 +321,37 @@ def _select_new_match(self, _entry, direction):
    207 321
                     self._ui.contacts_listbox.select_row(new_selected_row)
    
    208 322
                     new_selected_row.grab_focus()
    
    209 323
                     return
    
    210
    -            if direction == 'next':
    
    324
    +            if direction == Direction.NEXT:
    
    211 325
                     index += 1
    
    212 326
                 else:
    
    213 327
                     index -= 1
    
    214 328
     
    
    215
    -    def _select_first_row(self):
    
    329
    +    def _select_first_row(self) -> None:
    
    216 330
             first_row = self._ui.contacts_listbox.get_row_at_y(0)
    
    217 331
             self._ui.contacts_listbox.select_row(first_row)
    
    218 332
     
    
    219
    -    def _scroll_to_first_row(self):
    
    333
    +    def _scroll_to_first_row(self) -> None:
    
    220 334
             self._ui.scrolledwindow.get_vadjustment().set_value(0)
    
    221 335
     
    
    222
    -    def _filter_func(self, row, _user_data):
    
    336
    +    def _filter_func(self,
    
    337
    +                     row: ContactRow,
    
    338
    +                     _user_data: Optional[object]
    
    339
    +                     ) -> bool:
    
    223 340
             search_text = self._ui.search_entry.get_text().lower()
    
    224 341
             search_text_list = search_text.split()
    
    225 342
             row_text = row.get_search_text().lower()
    
    226 343
             for text in search_text_list:
    
    227 344
                 if text not in row_text:
    
    228 345
                     GLib.timeout_add(50, self._select_first_row)
    
    229
    -                return None
    
    346
    +                return False
    
    230 347
             GLib.timeout_add(50, self._select_first_row)
    
    231 348
             return True
    
    232 349
     
    
    233 350
         @staticmethod
    
    234
    -    def _sort_func(row1, row2, _user_data):
    
    351
    +    def _sort_func(row1: ContactRow,
    
    352
    +                   row2: ContactRow,
    
    353
    +                   _user_data: Optional[object]
    
    354
    +                   ) -> int:
    
    235 355
             name1 = row1.get_search_text()
    
    236 356
             name2 = row2.get_search_text()
    
    237 357
             account1 = row1.account
    
    ... ... @@ -243,101 +363,29 @@ def _sort_func(row1, row2, _user_data):
    243 363
     
    
    244 364
             return locale.strcoll(name1.lower(), name2.lower())
    
    245 365
     
    
    246
    -    def load_contacts(self):
    
    247
    -        self._ui.contacts_listbox.foreach(self._ui.contacts_listbox.remove)
    
    248
    -        self._ui.invitees_listbox.foreach(self._ui.invitees_listbox.remove)
    
    366
    +    def _reset(self) -> None:
    
    367
    +        def _remove(row):
    
    368
    +            self.remove(row)
    
    369
    +            row.destroy()
    
    370
    +        self._ui.contacts_listbox.foreach(_remove)
    
    371
    +        self._invitees_box.clear()
    
    372
    +
    
    373
    +    def load_contacts(self) -> None:
    
    374
    +        self._reset()
    
    375
    +
    
    249 376
             self._accounts = app.get_enabled_accounts_with_labels()
    
    250
    -        self.new_contact_rows = {}
    
    377
    +        self._new_contact_rows = {}
    
    251 378
             self._add_accounts()
    
    379
    +
    
    252 380
             self._add_contacts()
    
    381
    +
    
    253 382
             first_row = self._ui.contacts_listbox.get_row_at_index(0)
    
    254 383
             self._ui.contacts_listbox.select_row(first_row)
    
    255 384
             self._ui.search_entry.grab_focus()
    
    256 385
             self.emit('listbox-changed', False)
    
    257 386
     
    
    258
    -    def focus_search_entry(self):
    
    387
    +    def focus_search_entry(self) -> None:
    
    259 388
             self._ui.search_entry.grab_focus()
    
    260 389
     
    
    261
    -    def get_invitees(self):
    
    262
    -        invitees = []
    
    263
    -        for row in self._ui.invitees_listbox.get_children():
    
    264
    -            invitees.append(row.jid)
    
    265
    -        return invitees
    
    266
    -
    
    267
    -
    
    268
    -class ContactRow(Gtk.ListBoxRow):
    
    269
    -    def __init__(self, account, contact, jid, name, show_account):
    
    270
    -        Gtk.ListBoxRow.__init__(self)
    
    271
    -        self.get_style_context().add_class('start-chat-row')
    
    272
    -        self.account = account
    
    273
    -        self.account_label = app.get_account_label(account)
    
    274
    -        self.show_account = show_account
    
    275
    -        self.jid = jid
    
    276
    -        self.contact = contact
    
    277
    -        self.name = name
    
    278
    -        self.new = jid == ''
    
    279
    -
    
    280
    -        grid = Gtk.Grid()
    
    281
    -        grid.set_column_spacing(12)
    
    282
    -        grid.set_size_request(260, -1)
    
    283
    -
    
    284
    -        image = self._get_avatar_image(contact)
    
    285
    -        image.set_size_request(AvatarSize.ROSTER, AvatarSize.ROSTER)
    
    286
    -        grid.add(image)
    
    287
    -
    
    288
    -        box = Gtk.Box(orientation=Gtk.Orientation.VERTICAL, spacing=0)
    
    289
    -        box.set_hexpand(True)
    
    290
    -
    
    291
    -        if self.name is None:
    
    292
    -            self.name = _('Invite New Contact')
    
    293
    -
    
    294
    -        self.name_label = Gtk.Label(label=self.name)
    
    295
    -        self.name_label.set_ellipsize(Pango.EllipsizeMode.END)
    
    296
    -        self.name_label.set_xalign(0)
    
    297
    -        self.name_label.set_width_chars(20)
    
    298
    -        self.name_label.set_halign(Gtk.Align.START)
    
    299
    -        self.name_label.get_style_context().add_class('bold16')
    
    300
    -        name_box = Gtk.Box(orientation=Gtk.Orientation.HORIZONTAL, spacing=6)
    
    301
    -        name_box.add(self.name_label)
    
    302
    -
    
    303
    -        if show_account:
    
    304
    -            account_badge = AccountBadge(account)
    
    305
    -            account_badge.set_halign(Gtk.Align.END)
    
    306
    -            account_badge.set_valign(Gtk.Align.START)
    
    307
    -            account_badge.set_hexpand(True)
    
    308
    -            name_box.add(account_badge)
    
    309
    -        box.add(name_box)
    
    310
    -
    
    311
    -        self.jid_label = Gtk.Label(label=str(jid))
    
    312
    -        self.jid_label.set_tooltip_text(str(jid))
    
    313
    -        self.jid_label.set_ellipsize(Pango.EllipsizeMode.END)
    
    314
    -        self.jid_label.set_xalign(0)
    
    315
    -        self.jid_label.set_width_chars(22)
    
    316
    -        self.jid_label.set_halign(Gtk.Align.START)
    
    317
    -        self.jid_label.get_style_context().add_class('dim-label')
    
    318
    -        box.add(self.jid_label)
    
    319
    -
    
    320
    -        grid.add(box)
    
    321
    -
    
    322
    -        self.add(grid)
    
    323
    -        self.show_all()
    
    324
    -
    
    325
    -    def _get_avatar_image(self, contact):
    
    326
    -        if self.new:
    
    327
    -            icon_name = 'avatar-default'
    
    328
    -            return Gtk.Image.new_from_icon_name(icon_name, Gtk.IconSize.DND)
    
    329
    -
    
    330
    -        scale = self.get_scale_factor()
    
    331
    -        surface = contact.get_avatar(AvatarSize.ROSTER, scale)
    
    332
    -        return Gtk.Image.new_from_surface(surface)
    
    333
    -
    
    334
    -    def update_jid(self, jid):
    
    335
    -        self.jid = jid
    
    336
    -        self.jid_label.set_text(jid)
    
    337
    -
    
    338
    -    def get_search_text(self):
    
    339
    -        if self.contact is None:
    
    340
    -            return str(self.jid)
    
    341
    -        if self.show_account:
    
    342
    -            return '%s %s %s' % (self.name, self.jid, self.account_label)
    
    343
    -        return '%s %s' % (self.name, self.jid)
    390
    +    def get_invitees(self) -> List[str]:
    
    391
    +        return self._invitees_box.get_contact_jids()

  • test/gtk/groupchat_info.py
    ... ... @@ -100,7 +100,7 @@ def __init__(self):
    100 100
                                      spacing=18)
    
    101 101
             self._main_box.set_valign(Gtk.Align.FILL)
    
    102 102
     
    
    103
    -        self._muc_info_box = GroupChatInfoScrolled(None)
    
    103
    +        self._muc_info_box = GroupChatInfoScrolled()
    
    104 104
             self._muc_info_box.set_vexpand(True)
    
    105 105
     
    
    106 106
             self._main_box.add(self._muc_info_box)