aboutsummaryrefslogtreecommitdiff
path: root/main/data
diff options
context:
space:
mode:
Diffstat (limited to 'main/data')
-rw-r--r--main/data/conversation_list_titlebar.ui15
-rw-r--r--main/data/conversation_selector/conversation_row.ui1
-rw-r--r--main/data/conversation_selector/view.ui15
-rw-r--r--main/data/conversation_summary/view.ui7
-rw-r--r--main/data/global_search.ui170
-rw-r--r--main/data/im.dino.Dino.appdata.xml53
-rw-r--r--main/data/im.dino.Dino.appdata.xml.in14
-rw-r--r--main/data/manage_accounts/add_account_dialog.ui478
-rw-r--r--main/data/menu_add.ui1
-rw-r--r--main/data/menu_app.ui1
-rw-r--r--main/data/menu_conversation.ui1
-rw-r--r--main/data/search_autocomplete.ui24
-rw-r--r--main/data/theme.css32
-rw-r--r--main/data/unified_main_content.ui100
14 files changed, 737 insertions, 175 deletions
diff --git a/main/data/conversation_list_titlebar.ui b/main/data/conversation_list_titlebar.ui
index f8fabedc..6c5d2d0a 100644
--- a/main/data/conversation_list_titlebar.ui
+++ b/main/data/conversation_list_titlebar.ui
@@ -22,20 +22,5 @@
<property name="pack_type">start</property>
</packing>
</child>
- <child>
- <object class="GtkToggleButton" id="search_button">
- <property name="visible">True</property>
- <child>
- <object class="GtkImage">
- <property name="visible">True</property>
- <property name="icon-name">system-search-symbolic</property>
- <property name="icon-size">1</property>
- </object>
- </child>
- </object>
- <packing>
- <property name="pack_type">end</property>
- </packing>
- </child>
</template>
</interface>
diff --git a/main/data/conversation_selector/conversation_row.ui b/main/data/conversation_selector/conversation_row.ui
index 3e178c4f..86ca1ba6 100644
--- a/main/data/conversation_selector/conversation_row.ui
+++ b/main/data/conversation_selector/conversation_row.ui
@@ -80,6 +80,7 @@
</child>
<child>
<object class="GtkLabel" id="message_label">
+ <property name="use_markup">True</property>
<property name="max_width_chars">1</property>
<property name="ellipsize">end</property>
<property name="expand">True</property>
diff --git a/main/data/conversation_selector/view.ui b/main/data/conversation_selector/view.ui
index 365957a8..c5560ad1 100644
--- a/main/data/conversation_selector/view.ui
+++ b/main/data/conversation_selector/view.ui
@@ -5,21 +5,6 @@
<property name="expand">True</property>
<property name="orientation">vertical</property>
<child>
- <object class="GtkRevealer" id="search_revealer">
- <property name="hexpand">True</property>
- <property name="visible">True</property>
- <child>
- <object class="GtkSearchEntry" id="search_entry">
- <property name="primary_icon_name">edit-find-symbolic</property>
- <property name="placeholder_text" translatable="yes">Search</property>
- <property name="margin">10px</property>
- <property name="hexpand">True</property>
- <property name="visible">True</property>
- </object>
- </child>
- </object>
- </child>
- <child>
<object class="GtkScrolledWindow" id="scrolled">
<property name="expand">True</property>
<property name="hscrollbar_policy">never</property>
diff --git a/main/data/conversation_summary/view.ui b/main/data/conversation_summary/view.ui
index 2bc13752..90d3d7c1 100644
--- a/main/data/conversation_summary/view.ui
+++ b/main/data/conversation_summary/view.ui
@@ -15,6 +15,7 @@
<child>
<object class="GtkScrolledWindow" id="scrolled">
<property name="hscrollbar_policy">never</property>
+ <property name="expand">True</property>
<property name="visible">True</property>
<child>
<object class="GtkBox">
@@ -29,12 +30,6 @@
<property name="visible">True</property>
</object>
</child>
- <child>
- <object class="GtkBox" id="filler">
- <property name="expand">True</property>
- <property name="visible">True</property>
- </object>
- </child>
</object>
</child>
</object>
diff --git a/main/data/global_search.ui b/main/data/global_search.ui
new file mode 100644
index 00000000..4814f236
--- /dev/null
+++ b/main/data/global_search.ui
@@ -0,0 +1,170 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<interface>
+ <template class="DinoUiGlobalSearch" parent="GtkOverlay">
+ <property name="visible">True</property>
+ <child>
+ <object class="GtkBox">
+ <property name="orientation">vertical</property>
+ <property name="visible">True</property>
+ <child>
+ <object class="GtkSearchEntry" id="search_entry">
+ <property name="visible">True</property>
+ <property name="margin">12</property>
+ </object>
+ </child>
+ <child>
+ <object class="GtkStack" id="results_empty_stack">
+ <property name="visible">True</property>
+ <child>
+ <object class="GtkBox">
+ <property name="orientation">vertical</property>
+ <property name="spacing">10</property>
+ <property name="valign">center</property>
+ <property name="visible">True</property>
+ <child>
+ <object class="GtkImage">
+ <property name="visible">True</property>
+ <property name="icon-name">system-search-symbolic</property>
+ <property name="icon-size">4</property>
+ <property name="pixel-size">72</property>
+ <style>
+ <class name="dim-label"/>
+ </style>
+ </object>
+ </child>
+ <child>
+ <object class="GtkLabel">
+ <property name="label" translatable="yes">No active search</property>
+ <property name="xalign">0.5</property>
+ <property name="yalign">0.5</property>
+ <property name="visible">True</property>
+ <attributes>
+ <attribute name="weight" value="PANGO_WEIGHT_BOLD"/>
+ <attribute name="scale" value="1.3"/>
+ </attributes>
+ <style>
+ <class name="dim-label"/>
+ </style>
+ </object>
+ </child>
+ <child>
+ <object class="GtkLabel">
+ <property name="label" translatable="yes">Type to start a search</property>
+ <property name="xalign">0.5</property>
+ <property name="yalign">0.5</property>
+ <property name="visible">True</property>
+ <style>
+ <class name="dim-label"/>
+ </style>
+ </object>
+ </child>
+ </object>
+ <packing>
+ <property name="name">empty</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkBox">
+ <property name="orientation">vertical</property>
+ <property name="spacing">10</property>
+ <property name="valign">center</property>
+ <property name="visible">True</property>
+ <child>
+ <object class="GtkImage">
+ <property name="visible">True</property>
+ <property name="icon-name">face-uncertain-symbolic</property>
+ <property name="icon-size">4</property>
+ <property name="pixel-size">72</property>
+ <style>
+ <class name="dim-label"/>
+ </style>
+ </object>
+ </child>
+ <child>
+ <object class="GtkLabel">
+ <property name="label" translatable="yes">No matching messages</property>
+ <property name="xalign">0.5</property>
+ <property name="yalign">0.5</property>
+ <property name="visible">True</property>
+ <attributes>
+ <attribute name="weight" value="PANGO_WEIGHT_BOLD"/>
+ <attribute name="scale" value="1.3"/>
+ </attributes>
+ <style>
+ <class name="dim-label"/>
+ </style>
+ </object>
+ </child>
+ <child>
+ <object class="GtkLabel">
+ <property name="label" translatable="yes">Check the spelling or try to remove filters</property>
+ <property name="xalign">0.5</property>
+ <property name="yalign">0.5</property>
+ <property name="visible">True</property>
+ <style>
+ <class name="dim-label"/>
+ </style>
+ </object>
+ </child>
+ </object>
+ <packing>
+ <property name="name">no-result</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkBox">
+ <property name="orientation">vertical</property>
+ <property name="visible">True</property>
+ <child>
+ <object class="GtkLabel" id="entry_number_label">
+ <property name="xalign">0</property>
+ <property name="use-markup">True</property>
+ <property name="margin-left">17</property>
+ <property name="visible">True</property>
+ </object>
+ </child>
+ <child>
+ <object class="GtkScrolledWindow" id="results_scrolled">
+ <property name="hscrollbar-policy">never</property>
+ <property name="expand">True</property>
+ <property name="visible">True</property>
+ <child>
+ <object class="GtkBox" id="results_box">
+ <property name="orientation">vertical</property>
+ <property name="spacing">25</property>
+ <property name="margin">10</property>
+ <property name="valign">start</property>
+ <property name="visible">True</property>
+ </object>
+ </child>
+ </object>
+ </child>
+ </object>
+ <packing>
+ <property name="name">results</property>
+ </packing>
+ </child>
+ </object>
+ </child>
+ </object>
+ </child>
+ <child type="overlay">
+ <object class="GtkFrame" id="auto_complete_overlay">
+ <property name="visible">True</property>
+ <property name="margin-top">42</property>
+ <property name="margin-left">12</property>
+ <property name="margin-right">12</property>
+ <property name="valign">start</property>
+ <style>
+ <class name="auto-complete"/>
+ </style>
+ <child>
+ <object class="GtkListBox" id="auto_complete_list">
+ <property name="visible">True</property>
+ <property name="selection-mode">browse</property>
+ </object>
+ </child>
+ </object>
+ </child>
+ </template>
+</interface>
diff --git a/main/data/im.dino.Dino.appdata.xml b/main/data/im.dino.Dino.appdata.xml
index 5df9a3b1..3ef17748 100644
--- a/main/data/im.dino.Dino.appdata.xml
+++ b/main/data/im.dino.Dino.appdata.xml
@@ -6,63 +6,78 @@
<project_license>GPL-3.0+</project_license>
<name>Dino</name>
<summary>Modern XMPP Chat Client</summary>
- <summary xml:lang="zh_Hans">现代 XMPP 客户端</summary>
- <summary xml:lang="ru">Современный XMPP-клиент</summary>
- <summary xml:lang="ro">Client XMPP modern</summary>
- <summary xml:lang="nl_BE">Modernen XMPP-cliënt</summary>
- <summary xml:lang="nl">Moderne XMPP-cliënt</summary>
- <summary xml:lang="nb">Moderne XMPP-klient</summary>
- <summary xml:lang="lb">Modernen XMPP Client</summary>
- <summary xml:lang="it">Client XMPP moderno</summary>
+ <summary xml:lang="ro">Client XMPP de discuții modern</summary>
+ <summary xml:lang="pt_BR">Moderno cliente de chat XMPP</summary>
+ <summary xml:lang="pl">Nowoczesny klient Chatu XMPP</summary>
+ <summary xml:lang="nl_BE">Modernen XMPP-chatcliënt</summary>
+ <summary xml:lang="nl">Moderne XMPP-chatcliënt</summary>
+ <summary xml:lang="nb">Moderne XMPP-sludreklient</summary>
+ <summary xml:lang="lb">Modernen XMPP Chat Client</summary>
+ <summary xml:lang="it">Client di chat moderno per XMPP</summary>
+ <summary xml:lang="hu">Modern XMPP Üzenetküldő</summary>
+ <summary xml:lang="gl">Cliente moderno para conversas XMPP</summary>
<summary xml:lang="fr">Client XMPP moderne</summary>
- <summary xml:lang="fi">Moderni XMPP-asiakasohjelma</summary>
- <summary xml:lang="eu">XMPP bezero modernoa</summary>
- <summary xml:lang="es">Cliente XMPP moderno</summary>
+ <summary xml:lang="eu">XMPP txat bezero modernoa</summary>
+ <summary xml:lang="es">Cliente de XMPP moderno</summary>
<summary xml:lang="de">Moderner XMPP Chat Client</summary>
- <summary xml:lang="ca">Client d'XMPP modern</summary>
+ <summary xml:lang="ar">تطبيق حديث للدردشة عبر XMPP</summary>
<description>
<p>Dino is a modern open-source chat client for the desktop. It focuses on providing a clean and reliable Jabber/XMPP experience while having your privacy in mind.</p>
<p xml:lang="zh_Hans">Dino 是一个现代的开源聊天桌面客户端。它致力于提供一个清爽又可靠的 Jabber/XMPP 体验,同时又保护您的隐私。</p>
<p xml:lang="ro">Dino este un client de chat modern, cu sursă deschisă, pentru calculatoare. Se concentrează să furnizeze o experiență Jabber/XMPP clară și fiabilă, ținând cont de confidențialitatea dumneavoastră.</p>
+ <p xml:lang="pt_BR">Dino é um moderno chat de código aberto para desktop. Ele é focado em prover uma transparente e confiável experiência Jabber/XMPP, tendo em mente a sua privacidade.</p>
+ <p xml:lang="pl">Dino jest nowoczesnym klientem chat z otwartym źródłem w wersji na komputery. Skupia się na prostej obsłudze Jabber/XMPP dbając o twoją prywatność.</p>
<p xml:lang="nl_BE">Dino is een moderne, vrije chattoepassing voor uw bureaublad. Ze biedt een eenvoudige en betrouwbare Jabber/XMPP-ervaring, met uw privacy in het achterhoofd.</p>
<p xml:lang="nl">Dino is een moderne, vrije chattoepassing voor uw bureaublad. Ze biedt een eenvoudige en betrouwbare Jabber/XMPP-ervaring, met uw privacy in het achterhoofd.</p>
<p xml:lang="nb">Dino er en moderne friporg-sludringsklient for skrivebordet. Det fokuserer på rask og pålitelig XMPP-opplevelse, samtidig som det hegner om personvernet.</p>
<p xml:lang="lb">Dino ass e modernen, quell-offene Chat Client fir den Desktop. Hien biet eng opgeraumt a robust Jabber/XMPP Erfarung a leet ee Schwéierpunkt op Privatsphär.</p>
+ <p xml:lang="it">Dino è un client di chat per il desktop, moderno e open-source. Si concentra nel fornire un'esperienza Jabber/XMPP pulita e affidabile tenendo presente la tua privacy.</p>
+ <p xml:lang="hu">A Dino egy modern, nyílt forráskódú üzenetküldő alkalmazás asztali rendszerekre, ami a hangsúlyt a letisztult és megbízható Jabber/XMPP élményre helyezi, miközben a magánszféra megőrzését is fontosnak tartja.</p>
+ <p xml:lang="gl">Dino é un cliente moderno e de código aberto para o escritorio. Orientado a proporcionar unha experiencia Jabber/XMPP limpa e fiable tendo a intimidade presente.</p>
<p xml:lang="fr">Dino est un client de chat libre et moderne pour le bureau. Il tente de fournir une expérience Jabber/XMPP simple et fiable tout en ayant toujours à l’esprit votre vie privée.</p>
<p xml:lang="fi">Dino on nykyaikainen avoimen lähdekoodin jutteluohjelma työpöydälle. Se keskittyy tarjoamaan selkeän ja luotettavan Jabber/XMPP-kokemuksen unohtamatta yksityisyyttäsi.</p>
<p xml:lang="eu">Dino mahaigainerako iturburu irekiko txat bezero moderno bat da. Jabber/XMPP esperientzia garbi eta fidagarri bat ematen du zure pribatutasuna kontuan hartzeaz gain.</p>
<p xml:lang="es">Dino es un cliente de conversaciones moderno y libre para escritorio. Está enfocado en proveer una experiencia Jabber/XMPP limpia y confiable teniendo tu privacidad en mente.</p>
<p xml:lang="de">Dino ist ein moderner, quelloffener Chat Client. Er bietet eine aufgeräumte und robuste Jabber/XMPP Erfahrung und legt einen Schwerpunkt auf Privatsphäre.</p>
<p xml:lang="ca">Dino és un client de xat lliure i modern per a l'escriptori. Està centrat en proveir una experiència neta i fiable de Jabber/XMPP, sempre tenint en compte la vostra privacitat.</p>
+ <p xml:lang="ar">دينو برنامج حديث ومفتوح المصدر للدردشة صُمّم لسطح المكتب. ويُركّز علي تقديم تجربة نظيفة وموثوق منها لجابر/XMPP مع أخذ خصوصيتكم بعين الإعتبار.</p>
<p>It supports end-to-end encryption with OMEMO and OpenPGP and allows configuring privacy-related features such as read receipts and typing notifications.</p>
<p xml:lang="zh_Hans">它支持 OMEMO 和 OpenPGP 端对端加密并允许配置隐私相关的特性比如已读回执和输入提醒。</p>
<p xml:lang="ro">Suportă criptare de la un capăt la altul prin intermediul OMEMO și OpenPGP, și permite configurarea caracteristicilor legate de confidențialitate precum trimiterea notificărilor de primire și tastare.</p>
+ <p xml:lang="pt_BR">Suporte criptografia ponta a ponta com OMEMO e OpenPGP e permite configurar privacidade—características relacionadas às notificações de leitura, recebimento e escrita.</p>
<p xml:lang="nl_BE">Ze ondersteunt eind-tot-eind-versleuteling met OMEMO en OpenPGP, en laat u toe privacygerelateerde functies, gelijk leesbevestigingen en typmeldingen, in te stellen.</p>
<p xml:lang="nl">Ze ondersteunt eind-tot-eind-versleuteling met OMEMO en OpenPGP, en staat u toe privacy-gerelateerde functies, zoals leesbevestigingen en typmeldingen, in te stellen.</p>
<p xml:lang="nb">Det støtter ende-til-ende -kryptering med OMEMO og OpenPGP, og tillater oppsett av personvernsrelaterte funksjoner som meldingskvitteringer og skrivevarsling.</p>
<p xml:lang="lb">Hien ënnerstëtz Enn-zu-Enn Verschlësselung mat OMEMO an OpenPGP an enthält Privatsphäre-Astellungen zu Liesbestätegungen an Tipp-Benoriichtegungen.</p>
<p xml:lang="it">Support la crittografia end-to-end tramite OMEMO e OpenPGP e permette di configurare le funzioni relative alla privacy come le ricevute di lettura e le notifiche di digitazione.</p>
+ <p xml:lang="hu">Támogatja a végponttól-végpontig titkosítást az OMEMO és az OpenPGP által, és magánszférához kötődő beállítási lehetőségeket is biztosít, mint például a kézbesítési, vagy gépelési értesítések küldése.</p>
+ <p xml:lang="gl">Soporta o cifrado de extremo-a-extremo con OMEMO e OpenPGP e permite configurar características orientadas a intimidade tales como confirmación de lectura e notificacións de escritura.</p>
<p xml:lang="fr">Il prend en charge le chiffrement de bout en bout avec OMEMO et OpenPGP et permet de configurer les fonctions liées à la vie privée telles que l’accusé de réception et les notifications de frappe.</p>
<p xml:lang="fi">Se tukee päästä päähän -salausta OMEMO:n ja OpenPGP:n avulla ja mahdollistaa yksityisyyteen liittyvien ominaisuuksien, kuten lukukuittausten ja kirjoitusilmoitusten asetusten määrittämisen.</p>
- <p xml:lang="eu">Amaieratik amaierarako enkriptazioa onartzen du OMEMO eta OpenPGPrekin eta pribatutasun ezaugarriak konfiguratzea baimentzen du irakurtze baieztapenak eta idazketa jakinarazpenak bezala.</p>
+ <p xml:lang="eu">Amaieratik amaierarako enkriptazioa onartzen du OMEMO eta OpenPGPrekin eta pribatutasun ezaugarriak konfiguratzea baimentzen du irakurtze markak eta idazketa jakinarazpenak bezala.</p>
<p xml:lang="es">Soporta cifrado de extremo a extremo a través de OMEMO y OpenPGP y permite configurar las características relacionadas con la privacidad, como confirmaciones de lectura y notificaciones de escritura.</p>
<p xml:lang="de">Er unterstützt Ende-zu-Ende Verschlüsselung mit OMEMO und OpenPGP und enthält Privatsphäre-Einstellungen zu Lesebestätigungen und Tippbenachrichtigungen.</p>
<p xml:lang="ca">Implementa xifratge punt a punt amb OMEMO i OpenPGP, i permet configurar funcionalitats relacionades amb la privacitat com per exemple rebuts de lectura i notificacions d'escriptura.</p>
+ <p xml:lang="ar">وهو يدعم التشفير بواسطة OMEMO و OpenPGP يسمح بإعداد ميزات الخصوصية كالإيصالات المقروءة والإخطارات عند الكتابة.</p>
<p>Dino fetches history from the server and synchronizes messages with other devices.</p>
<p xml:lang="zh_Hans">Dino 从服务器获取消息并和其他设备同步。</p>
<p xml:lang="ru">Dino загружает историю с сервера и синхронизирует сообщения с другими устройствами.</p>
<p xml:lang="ro">Dino preia istoricul discuțiilor de pe server și sincronizează mesajele cu celelalte dispozitive.</p>
+ <p xml:lang="pt_BR">Dino obtém o histórico do servidor e sincroniza mensagens com outros dispositivos.</p>
<p xml:lang="nl_BE">Dino haalt de geschiedenis op van de server en synchroniseert berichten met andere apparaten.</p>
<p xml:lang="nl">Dino haalt de geschiedenis op van de server en synchroniseert berichten met andere apparaten.</p>
<p xml:lang="nb">Dino henter historikk fra tjeneren og synkroniserer meldinger med andre enheter.</p>
<p xml:lang="lb">Dino rifft  Gespréichverläf vum Server of a synchroniséiert Noriichte mat anere Geräter.</p>
<p xml:lang="it">Dino recupera la cronologia dal server e sincronizza i messaggi con gli altri dispositivi.</p>
+ <p xml:lang="hu">A Dino lekéri a chat előzményeket a szerverről, és szinkronizálja az üzeneteket a többi eszközzel.</p>
+ <p xml:lang="gl">Dino obtén o histórico desde o servidor e sincroniza as mensaxes con outros dispositivos.</p>
<p xml:lang="fr">Dino récupère l’historique du serveur et synchronise les messages avec d'autres appareils.</p>
<p xml:lang="fi">Dino hakee historian palvelimelta ja synkronisoi viestit muiden laitteiden kanssa.</p>
<p xml:lang="eu">Dinok zerbitzaritik hartzen du historia eta beste gailuekin mezuak sinkronizatzen ditu.</p>
<p xml:lang="es">Dino recupera los mensajes desde el servidor y sincroniza los mensajes con otros dispositivos.</p>
<p xml:lang="de">Dino ruft Gesprächsverläufe vom Server ab und synchronisiert Nachrichten mit anderen Geräten.</p>
<p xml:lang="ca">Dino recupera l'historial del servidor i sincronitza els missatges amb altres dispositius.</p>
+ <p xml:lang="ar">يقوم دينو بجلب السِجلّ مِن السيرفر ثم يُزامِن الرسائل مع الأجهزة الأخرى.</p>
</description>
<screenshots>
<screenshot type="default">
@@ -70,17 +85,22 @@
<caption xml:lang="zh_Hans">带有对话的主窗口</caption>
<caption xml:lang="ru">Главное окно с чатами</caption>
<caption xml:lang="ro">Fereastra principală de conversații</caption>
+ <caption xml:lang="pt_BR">Janela principal com as conversas</caption>
+ <caption xml:lang="pl">Główne okno rozmów</caption>
<caption xml:lang="nl_BE">Hoofdvenster met gesprekken</caption>
<caption xml:lang="nl">Hoofdvenster met gesprekken</caption>
<caption xml:lang="nb">Hovedvindu med samtaler</caption>
<caption xml:lang="lb">Haaptfënster mat den Conversatiounen</caption>
<caption xml:lang="it">La finestra principale con le conversazioni</caption>
+ <caption xml:lang="hu">A fő ablak a beszélgetésekkel</caption>
+ <caption xml:lang="gl">Xanela principal con conversas</caption>
<caption xml:lang="fr">Fenêtre principale avec des conversations</caption>
<caption xml:lang="fi">Keskustelut pääikkunassa</caption>
<caption xml:lang="eu">Leiho nagusia elkarrizketekin</caption>
<caption xml:lang="es">Ventana principal con conversaciones</caption>
<caption xml:lang="de">Hauptfenster mit Konversationen</caption>
<caption xml:lang="ca">Finestra principal amb converses</caption>
+ <caption xml:lang="ar">النافذة الرئيسية بالمُحادثات</caption>
<image height="900" width="1600">https://dino.im/img/appdata/main.png</image>
</screenshot>
<screenshot>
@@ -89,16 +109,20 @@
<caption xml:lang="ru">Начать чат</caption>
<caption xml:lang="ro">Pornește o conversație</caption>
<caption xml:lang="pt_BR">Iniciar conversa</caption>
+ <caption xml:lang="pl">Rozpocznij rozmowę</caption>
<caption xml:lang="nl_BE">Gesprek beginnen</caption>
<caption xml:lang="nl">Gesprek beginnen</caption>
<caption xml:lang="nb">Start samtale</caption>
<caption xml:lang="lb">Konversatioun starten</caption>
<caption xml:lang="it">Inizia una Conversazione</caption>
+ <caption xml:lang="hu">Csevegés kezdeményezése</caption>
+ <caption xml:lang="gl">Iniciar Conversa</caption>
<caption xml:lang="fr">Commencer une discussion</caption>
<caption xml:lang="fi">Aloita keskustelu</caption>
<caption xml:lang="eu">Elkarrizketa hasi</caption>
<caption xml:lang="es">Iniciar conversación</caption>
<caption xml:lang="de">Unterhaltung starten</caption>
+ <caption xml:lang="ar">الشروع في محادثة</caption>
<image height="900" width="1600">https://dino.im/img/appdata/start_chat.png</image>
</screenshot>
<screenshot>
@@ -114,6 +138,8 @@
<caption xml:lang="lb">Kontaktdetailer</caption>
<caption xml:lang="ja">相手先の詳細</caption>
<caption xml:lang="it">Dettagli del contatto</caption>
+ <caption xml:lang="hu">Felhasználó információ</caption>
+ <caption xml:lang="gl">Detalles do contacto</caption>
<caption xml:lang="fr">Informations du contact</caption>
<caption xml:lang="fi">Yhteystiedot</caption>
<caption xml:lang="eu">Kontaktuaren xehetasunak</caption>
@@ -121,6 +147,7 @@
<caption xml:lang="eo">Kontaktaj Detaloj</caption>
<caption xml:lang="de">Kontaktdetails</caption>
<caption xml:lang="ca">Detalls del contacte</caption>
+ <caption xml:lang="ar">تفاصيل عن المُراسل</caption>
<image height="900" width="1600">https://dino.im/img/appdata/contact_details.png</image>
</screenshot>
</screenshots>
diff --git a/main/data/im.dino.Dino.appdata.xml.in b/main/data/im.dino.Dino.appdata.xml.in
index cf748d9b..17c56b8b 100644
--- a/main/data/im.dino.Dino.appdata.xml.in
+++ b/main/data/im.dino.Dino.appdata.xml.in
@@ -7,17 +7,9 @@
<name>Dino</name>
<summary>Modern XMPP Chat Client</summary>
<description>
- <p>
- Dino is a modern open-source chat client for the desktop. It focuses on providing a clean and reliable
- Jabber/XMPP experience while having your privacy in mind.
- </p>
- <p>
- It supports end-to-end encryption with OMEMO and OpenPGP and allows configuring privacy-related features
- such as read receipts and typing notifications.
- </p>
- <p>
- Dino fetches history from the server and synchronizes messages with other devices.
- </p>
+ <p>Dino is a modern open-source chat client for the desktop. It focuses on providing a clean and reliable Jabber/XMPP experience while having your privacy in mind.</p>
+ <p>It supports end-to-end encryption with OMEMO and OpenPGP and allows configuring privacy-related features such as read receipts and typing notifications.</p>
+ <p>Dino fetches history from the server and synchronizes messages with other devices.</p>
</description>
<screenshots>
<screenshot type="default">
diff --git a/main/data/manage_accounts/add_account_dialog.ui b/main/data/manage_accounts/add_account_dialog.ui
index 44c131c3..b39f07a8 100644
--- a/main/data/manage_accounts/add_account_dialog.ui
+++ b/main/data/manage_accounts/add_account_dialog.ui
@@ -1,136 +1,390 @@
<?xml version="1.0" encoding="UTF-8"?>
<interface>
<template class="DinoUiManageAccountsAddAccountDialog">
- <property name="default_width">300</property>
+ <property name="default_width">400</property>
<property name="modal">True</property>
- <child type="titlebar">
- <object class="GtkHeaderBar">
- <property name="visible">True</property>
- <child>
- <object class="GtkButton" id="cancel_button">
- <property name="label" translatable="yes">Cancel</property>
- <property name="visible">True</property>
- </object>
- <packing>
- <property name="pack_type">start</property>
- </packing>
- </child>
- <child>
- <object class="GtkButton" id="ok_button">
- <property name="can_default">True</property>
- <property name="label" translatable="yes">Save</property>
- <property name="sensitive">False</property>
- <property name="visible">True</property>
- <style>
- <class name="suggested-action"/>
- </style>
- </object>
- <packing>
- <property name="pack_type">end</property>
- </packing>
- </child>
- </object>
- </child>
<child internal-child="vbox">
<object class="GtkBox">
<property name="visible">True</property>
<child>
- <object class="GtkGrid" id="info_grid">
- <property name="orientation">vertical</property>
- <property name="margin">20</property>
- <property name="column-spacing">10</property>
- <property name="row-spacing">7</property>
+ <object class="GtkOverlay">
<property name="visible">True</property>
<child>
- <object class="GtkLabel">
- <property name="label">JID</property>
- <property name="xalign">1</property>
- <property name="visible">True</property>
- </object>
- <packing>
- <property name="left_attach">0</property>
- <property name="top_attach">0</property>
- <property name="width">1</property>
- <property name="height">1</property>
- </packing>
- </child>
- <child>
- <object class="GtkEntry" id="jid_entry">
- <property name="activates_default">True</property>
- <property name="hexpand">True</property>
- <property name="width_request">200</property>
- <property name="visible">True</property>
- </object>
- <packing>
- <property name="left_attach">1</property>
- <property name="top_attach">0</property>
- <property name="width">1</property>
- <property name="height">1</property>
- </packing>
- </child>
- <child>
- <object class="GtkLabel">
- <property name="label" translatable="yes">Password</property>
- <property name="xalign">1</property>
+ <object class="GtkBox">
+ <property name="expand">True</property>
<property name="visible">True</property>
+ <child>
+ <object class="GtkStack" id="stack">
+ <property name="transition_type">slide-left</property>
+ <property name="expand">True</property>
+ <property name="visible">True</property>
+ <child>
+ <object class="GtkBox" id="sign_in_box">
+ <property name="orientation">vertical</property>
+ <property name="margin">20</property>
+ <property name="margin-start">50</property>
+ <property name="margin-end">50</property>
+ <property name="visible">True</property>
+ <child>
+ <object class="GtkLabel">
+ <property name="label">Sign in</property>
+ <property name="margin-bottom">10</property>
+ <property name="visible">True</property>
+ <attributes>
+ <attribute name="scale" value="1.3"/>
+ </attributes>
+ </object>
+ </child>
+ <child>
+ <object class="GtkBox" id="info_grid">
+ <property name="orientation">vertical</property>
+ <property name="visible">True</property>
+ <child>
+ <object class="GtkLabel">
+ <property name="label">JID</property>
+ <property name="xalign">0</property>
+ <property name="visible">True</property>
+ <attributes>
+ <attribute name="scale" value="0.9"/>
+ </attributes>
+ </object>
+ </child>
+ <child>
+ <object class="GtkEntry" id="jid_entry">
+ <property name="activates_default">True</property>
+ <property name="hexpand">True</property>
+ <property name="width_request">200</property>
+ <property name="visible">True</property>
+ </object>
+ </child>
+ <child>
+ <object class="GtkLabel">
+ <property name="label" translatable="yes">Password</property>
+ <property name="xalign">0</property>
+ <property name="margin-top">7</property>
+ <property name="visible">True</property>
+ <attributes>
+ <attribute name="scale" value="0.9"/>
+ </attributes>
+ </object>
+ </child>
+ <child>
+ <object class="GtkEntry" id="password_entry">
+ <property name="activates_default">True</property>
+ <property name="hexpand">True</property>
+ <property name="input_purpose">password</property>
+ <property name="width_request">200</property>
+ <property name="visible">True</property>
+ <property name="visibility">False</property>
+ </object>
+ </child>
+ <child>
+ <object class="GtkLabel">
+ <property name="label" translatable="yes">Local alias</property>
+ <property name="xalign">0</property>
+ <property name="margin-top">7</property>
+ <property name="visible">True</property>
+ <attributes>
+ <attribute name="scale" value="0.9"/>
+ </attributes>
+ </object>
+ </child>
+ <child>
+ <object class="GtkEntry" id="alias_entry">
+ <property name="activates_default">True</property>
+ <property name="hexpand">True</property>
+ <property name="width_request">200</property>
+ <property name="visible">True</property>
+ </object>
+ </child>
+ </object>
+ </child>
+ <child>
+ <object class="GtkBox">
+ <property name="orientation">horizontal</property>
+ <property name="margin-top">20</property>
+ <property name="visible">True</property>
+ <child>
+ <object class="GtkButton" id="serverlist_button">
+ <property name="label" translatable="yes">Create account</property>
+ <property name="visible">True</property>
+ </object>
+ <packing>
+ <property name="pack_type">start</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkButton" id="sign_in_continue">
+ <property name="can_default">True</property>
+ <property name="label" translatable="yes">Save</property>
+ <property name="sensitive">False</property>
+ <property name="visible">True</property>
+ <style>
+ <class name="suggested-action"/>
+ </style>
+ </object>
+ <packing>
+ <property name="pack_type">end</property>
+ </packing>
+ </child>
+ </object>
+ </child>
+ </object>
+ <packing>
+ <property name="name">login</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkBox" id="create_account_box">
+ <property name="orientation">vertical</property>
+ <property name="margin">20</property>
+ <property name="margin-start">50</property>
+ <property name="margin-end">50</property>
+ <property name="visible">True</property>
+ <child>
+ <object class="GtkLabel">
+ <property name="label" translatable="yes">Create account</property>
+ <property name="margin-bottom">20</property>
+ <property name="visible">True</property>
+ <attributes>
+ <attribute name="scale" value="1.3"/>
+ </attributes>
+ </object>
+ </child>
+ <child>
+ <object class="GtkLabel">
+ <property name="visible">True</property>
+ <property name="xalign">0</property>
+ <property name="label" translatable="yes">Choose a public server</property>
+ <attributes>
+ <attribute name="weight" value="PANGO_WEIGHT_BOLD"/>
+ </attributes>
+ </object>
+ </child>
+ <child>
+ <object class="GtkFrame">
+ <property name="visible">True</property>
+ <child>
+ <object class="GtkScrolledWindow">
+ <property name="max_content_height">300</property>
+ <property name="propagate_natural_height">True</property>
+ <property name="hscrollbar_policy">never</property>
+ <property name="visible">True</property>
+ <child>
+ <object class="GtkListBox" id="server_list_box">
+ <property name="visible">True</property>
+ </object>
+ </child>
+ </object>
+ </child>
+ </object>
+ </child>
+ <child>
+ <object class="GtkLabel">
+ <property name="visible">True</property>
+ <property name="xalign">0</property>
+ <property name="margin-top">20</property>
+ <property name="label" translatable="yes">Or specify a server address</property>
+ <attributes>
+ <attribute name="weight" value="PANGO_WEIGHT_BOLD"/>
+ </attributes>
+ </object>
+ </child>
+ <child>
+ <object class="GtkEntry" id="server_entry">
+ <property name="activates_default">True</property>
+ <property name="can_default">True</property>
+ <property name="visible">True</property>
+ </object>
+ </child>
+ <child>
+ <object class="GtkBox">
+ <property name="visible">True</property>
+ <property name="margin-top">30</property>
+ <property name="orientation">horizontal</property>
+ <child>
+ <object class="GtkButton" id="login_button">
+ <property name="label" translatable="yes">Sign in instead</property>
+ <property name="visible">True</property>
+ </object>
+ <packing>
+ <property name="pack_type">start</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkButton" id="select_server_continue">
+ <property name="sensitive">False</property>
+ <property name="can_default">True</property>
+ <property name="visible">True</property>
+ <style>
+ <class name="text-button"/>
+ <class name="suggested-action"/>
+ </style>
+ <child>
+ <object class="GtkStack" id="select_server_continue_stack">
+ <property name="visible">True</property>
+ <child>
+ <object class="GtkLabel">
+ <property name="label" translatable="yes">Next</property>
+ <property name="visible">True</property>
+ </object>
+ <packing>
+ <property name="name">label</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkSpinner">
+ <property name="active">True</property>
+ <property name="visible">True</property>
+ </object>
+ <packing>
+ <property name="name">spinner</property>
+ </packing>
+ </child>
+ </object>
+
+ </child>
+ </object>
+ <packing>
+ <property name="pack_type">end</property>
+ </packing>
+ </child>
+ </object>
+ </child>
+ </object>
+ <packing>
+ <property name="name">server</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkBox" id="register_box">
+ <property name="margin">20</property>
+ <property name="margin-start">50</property>
+ <property name="margin-end">50</property>
+ <property name="orientation">vertical</property>
+ <property name="visible">True</property>
+ <child>
+ <object class="GtkLabel" id="register_title">
+ <property name="margin-bottom">10</property>
+ <property name="visible">True</property>
+ <attributes>
+ <attribute name="scale" value="1.3"/>
+ </attributes>
+ </object>
+ </child>
+ <child>
+ <object class="GtkBox" id="form_box">
+ <property name="orientation">vertical</property>
+ <property name="visible">True</property>
+ </object>
+ </child>
+ <child>
+ <object class="GtkBox">
+ <property name="visible">True</property>
+ <property name="margin-top">30</property>
+ <property name="orientation">horizontal</property>
+ <child>
+ <object class="GtkButton" id="register_form_back">
+ <property name="label" translatable="yes">Pick another server</property>
+ <property name="visible">True</property>
+ </object>
+ <packing>
+ <property name="pack_type">start</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkButton" id="register_form_continue">
+ <property name="can_default">True</property>
+ <property name="visible">True</property>
+ <style>
+ <class name="text-button"/>
+ <class name="suggested-action"/>
+ </style>
+ <child>
+ <object class="GtkStack" id="register_form_continue_stack">
+ <property name="visible">True</property>
+ <child>
+ <object class="GtkLabel" id="register_form_continue_label">
+ <property name="label" translatable="yes">Next</property>
+ <property name="visible">True</property>
+ </object>
+ <packing>
+ <property name="name">label</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkSpinner">
+ <property name="active">True</property>
+ <property name="visible">True</property>
+ </object>
+ <packing>
+ <property name="name">spinner</property>
+ </packing>
+ </child>
+ </object>
+ </child>
+ </object>
+ <packing>
+ <property name="pack_type">end</property>
+ </packing>
+ </child>
+ </object>
+ </child>
+ </object>
+ <packing>
+ <property name="name">form</property>
+ </packing>
+ </child>
+ </object>
+ </child>
</object>
<packing>
- <property name="left_attach">0</property>
- <property name="top_attach">1</property>
- <property name="width">1</property>
- <property name="height">1</property>
+ <property name="index">-1</property>
</packing>
</child>
- <child>
- <object class="GtkEntry" id="password_entry">
- <property name="activates_default">True</property>
- <property name="hexpand">True</property>
- <property name="input_purpose">password</property>
- <property name="width_request">200</property>
+ <child type="overlay">
+ <object class="GtkRevealer" id="notification_revealer">
<property name="visible">True</property>
- <property name="visibility">False</property>
+ <property name="can_focus">False</property>
+ <property name="halign">center</property>
+ <property name="valign">start</property>
+ <child>
+ <object class="GtkFrame" id="frame2">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="label_xalign">0</property>
+ <property name="shadow_type">none</property>
+ <style>
+ <class name="app-notification"/>
+ </style>
+ <child>
+ <object class="GtkBox" id="box2">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="spacing">20</property>
+ <child>
+ <object class="GtkLabel" id="notification_label">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ </object>
+ </child>
+ <child type="label_item">
+ <placeholder/>
+ </child>
+ </object>
+ </child>
</object>
- <packing>
- <property name="left_attach">1</property>
- <property name="top_attach">1</property>
- <property name="width">1</property>
- <property name="height">1</property>
- </packing>
- </child>
- <child>
- <object class="GtkLabel">
- <property name="label" translatable="yes">Local alias</property>
- <property name="xalign">1</property>
- <property name="visible">True</property>
- </object>
- <packing>
- <property name="left_attach">0</property>
- <property name="top_attach">2</property>
- <property name="width">1</property>
- <property name="height">1</property>
- </packing>
- </child>
- <child>
- <object class="GtkEntry" id="alias_entry">
- <property name="activates_default">True</property>
- <property name="hexpand">True</property>
- <property name="width_request">200</property>
- <property name="visible">True</property>
- </object>
- <packing>
- <property name="left_attach">1</property>
- <property name="top_attach">2</property>
- <property name="width">1</property>
- <property name="height">1</property>
- </packing>
</child>
</object>
</child>
</object>
</child>
- <action-widgets>
- <action-widget response="cancel">cancel_button</action-widget>
- <action-widget response="ok" default="true">ok_button</action-widget>
- </action-widgets>
</template>
</interface>
diff --git a/main/data/menu_add.ui b/main/data/menu_add.ui
index d8fd691b..fdf01352 100644
--- a/main/data/menu_add.ui
+++ b/main/data/menu_add.ui
@@ -1,3 +1,4 @@
+<?xml version="1.0" encoding="UTF-8"?>
<interface>
<menu id="menu_add">
<section>
diff --git a/main/data/menu_app.ui b/main/data/menu_app.ui
index beb81f3f..eb862ddb 100644
--- a/main/data/menu_app.ui
+++ b/main/data/menu_app.ui
@@ -1,3 +1,4 @@
+<?xml version="1.0" encoding="UTF-8"?>
<interface>
<menu id="menu_app">
<section>
diff --git a/main/data/menu_conversation.ui b/main/data/menu_conversation.ui
index 42b580be..a65522c3 100644
--- a/main/data/menu_conversation.ui
+++ b/main/data/menu_conversation.ui
@@ -1,3 +1,4 @@
+<?xml version="1.0" encoding="UTF-8"?>
<interface>
<menu id="menu_conversation">
<section>
diff --git a/main/data/search_autocomplete.ui b/main/data/search_autocomplete.ui
new file mode 100644
index 00000000..94ec5d7f
--- /dev/null
+++ b/main/data/search_autocomplete.ui
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<interface>
+ <object class="GtkBox" id="root">
+ <property name="orientation">horizontal</property>
+ <property name="visible">True</property>
+ <child>
+ <object class="DinoUiAvatarImage" id="image">
+ <property name="margin">4</property>
+ <property name="margin-start">6</property>
+ <property name="margin-end">6</property>
+ <property name="height">24</property>
+ <property name="width">24</property>
+ <property name="visible">True</property>
+ <property name="allow_gray">False</property>
+ </object>
+ </child>
+ <child>
+ <object class="GtkLabel" id="label">
+ <property name="visible">True</property>
+ <property name="ellipsize">end</property>
+ </object>
+ </child>
+ </object>
+</interface> \ No newline at end of file
diff --git a/main/data/theme.css b/main/data/theme.css
index e7d58ffb..174ce5b2 100644
--- a/main/data/theme.css
+++ b/main/data/theme.css
@@ -17,12 +17,38 @@ window.dino-main .dino-conversation undershoot {
background: none;
}
-window.dino-main .dino-chatinput frame box {
+@keyframes highlight {
+ from { background: alpha(@warning_color, 0.5) }
+ to { background: transparent }
+}
+
+window.dino-main .dino-conversation .highlight-once {
+ animation-duration: 3s;
+ animation-timing-function: ease-out;
+ animation-iteration-count: 1;
+ animation-name: highlight;
+}
+
+window.dino-main .dino-sidebar > frame {
+ background: @insensitive_bg_color;
+ border-left: 1px solid @borders;
+ border-bottom: 1px solid @borders;
+}
+
+window.dino-main .dino-sidebar > frame.collapsed {
+ border-bottom: 1px solid @borders;
+}
+
+window.dino-main .dino-sidebar frame.auto-complete {
background: @theme_base_color;
}
-window.dino-main .dino-chatinput frame box:backdrop {
- background: @theme_unfocused_base_color;
+window.dino-main .dino-sidebar frame.auto-complete list > row {
+ transition: none;
+}
+
+window.dino-main .dino-chatinput frame box {
+ background: transparent;
}
window.dino-main button.dino-chatinput-button {
diff --git a/main/data/unified_main_content.ui b/main/data/unified_main_content.ui
new file mode 100644
index 00000000..b2f3a891
--- /dev/null
+++ b/main/data/unified_main_content.ui
@@ -0,0 +1,100 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<interface>
+ <object class="GtkPaned" id="paned">
+ <property name="position">300</property>
+ <property name="orientation">horizontal</property>
+ <property name="visible">True</property>
+ <child>
+ <object class="DinoUiConversationSelectorView" id="conversation_list">
+ <property name="visible">True</property>
+ </object>
+ <packing>
+ <property name="resize">False</property>
+ <property name="shrink">False</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkOverlay">
+ <property name="visible">True</property>
+ <child>
+ <object class="GtkOverlay">
+ <property name="visible">True</property>
+ <child>
+ <object class="GtkBox">
+ <property name="orientation">vertical</property>
+ <property name="visible">True</property>
+ <style>
+ <class name="dino-conversation"/>
+ </style>
+ <child>
+ <object class="DinoUiConversationSummaryConversationView" id="conversation_frame">
+ <property name="visible">True</property>
+ </object>
+ </child>
+ <child>
+ <object class="DinoUiChatInputView" id="chat_input">
+ <property name="visible">True</property>
+ </object>
+ </child>
+ </object>
+ </child>
+ <child type="overlay">
+ <object class="GtkRevealer" id="goto_end_revealer">
+ <property name="halign">end</property>
+ <property name="valign">end</property>
+ <property name="transition-type">crossfade</property>
+ <property name="visible">True</property>
+ <property name="margin-end">30</property>
+ <property name="margin-bottom">70</property>
+ <child>
+ <object class="GtkButton" id="goto_end_button">
+ <property name="vexpand">False</property>
+ <property name="halign">end</property>
+ <property name="valign">end</property>
+ <property name="visible">True</property>
+ <style>
+ <class name="circular"/>
+ </style>
+ <child>
+ <object class="GtkImage">
+ <property name="icon-name">go-down-symbolic</property>
+ <property name="icon-size">1</property>
+ <property name="visible">True</property>
+ </object>
+ </child>
+ </object>
+ </child>
+ </object>
+ </child>
+ </object>
+ </child>
+ <child type="overlay">
+ <object class="GtkRevealer" id="search_revealer">
+ <property name="visible">True</property>
+ <property name="halign">end</property>
+ <property name="transition-type">slide-left</property>
+ <style>
+ <class name="dino-sidebar"/>
+ </style>
+ <child>
+ <object class="GtkFrame">
+ <property name="visible">True</property>
+ <property name="width-request">400</property>
+ <property name="shadow-type">none</property>
+ <child>
+ <object class="DinoUiGlobalSearch" id="search_box">
+ <property name="visible">True</property>
+ </object>
+ </child>
+ </object>
+ </child>
+ </object>
+ </child>
+ </object>
+ <packing>
+ <property name="resize">True</property>
+ <property name="shrink">False</property>
+ </packing>
+ </child>
+ </object>
+</interface>