Daniel Brötzmann pushed to branch master at gajim / gajim
Commits:
-
4c5cd191
by wurstsalat at 2021-12-23T20:57:19+01:00
-
50fdeece
by wurstsalat at 2021-12-23T20:59:48+01:00
-
6115adf4
by wurstsalat at 2021-12-23T21:01:11+01:00
12 changed files:
- gajim/data/gui/groupchat_control.ui
- gajim/data/gui/groupchat_info_scrolled.ui
- − gajim/data/gui/groupchat_invite.ui
- + gajim/data/gui/groupchat_inviter.ui
- gajim/data/style/gajim.css
- gajim/gtk/add_contact.py
- + gajim/gtk/contacts_flowbox.py
- gajim/gtk/controls/groupchat.py
- gajim/gtk/groupchat_info.py
- gajim/gtk/groupchat_invitation.py
- gajim/gtk/groupchat_invite.py → gajim/gtk/groupchat_inviter.py
- test/gtk/groupchat_info.py
Changes:
| ... | ... | @@ -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>
|
| ... | ... | @@ -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>
|
| 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>
|
| 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>
|
| ... | ... | @@ -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; }
|
| ... | ... | @@ -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()
|
| 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)
|
| ... | ... | @@ -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 |
|
| ... | ... | @@ -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)
|
| ... | ... | @@ -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 |
|
| ... | ... | @@ -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()
|
| ... | ... | @@ -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)
|