diff options
Diffstat (limited to 'main/data')
-rw-r--r-- | main/data/conversation_list_titlebar.ui | 15 | ||||
-rw-r--r-- | main/data/conversation_selector/conversation_row.ui | 1 | ||||
-rw-r--r-- | main/data/conversation_selector/view.ui | 15 | ||||
-rw-r--r-- | main/data/conversation_summary/view.ui | 7 | ||||
-rw-r--r-- | main/data/global_search.ui | 170 | ||||
-rw-r--r-- | main/data/im.dino.Dino.appdata.xml | 53 | ||||
-rw-r--r-- | main/data/im.dino.Dino.appdata.xml.in | 14 | ||||
-rw-r--r-- | main/data/manage_accounts/add_account_dialog.ui | 478 | ||||
-rw-r--r-- | main/data/menu_add.ui | 1 | ||||
-rw-r--r-- | main/data/menu_app.ui | 1 | ||||
-rw-r--r-- | main/data/menu_conversation.ui | 1 | ||||
-rw-r--r-- | main/data/search_autocomplete.ui | 24 | ||||
-rw-r--r-- | main/data/theme.css | 32 | ||||
-rw-r--r-- | main/data/unified_main_content.ui | 100 |
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> |