From 98f63d3f278030fa09ada021aac89de84386dd13 Mon Sep 17 00:00:00 2001 From: Ximi1970 Date: Sat, 5 Dec 2020 15:18:30 +0100 Subject: [PATCH] Restore window postions on startup (opensuse) --- app/SysTray-X/languages/SysTray-X.bg.ts | 45 ++++---- app/SysTray-X/languages/SysTray-X.de.qm | Bin 4730 -> 4891 bytes app/SysTray-X/languages/SysTray-X.de.ts | 45 ++++---- app/SysTray-X/languages/SysTray-X.el.qm | Bin 4938 -> 5097 bytes app/SysTray-X/languages/SysTray-X.el.ts | 45 ++++---- app/SysTray-X/languages/SysTray-X.en-US.qm | Bin 4336 -> 4477 bytes app/SysTray-X/languages/SysTray-X.en-US.ts | 45 ++++---- app/SysTray-X/languages/SysTray-X.es-AR.ts | 45 ++++---- app/SysTray-X/languages/SysTray-X.fr.ts | 45 ++++---- app/SysTray-X/languages/SysTray-X.hr.ts | 45 ++++---- app/SysTray-X/languages/SysTray-X.it.qm | Bin 4682 -> 4849 bytes app/SysTray-X/languages/SysTray-X.it.ts | 45 ++++---- app/SysTray-X/languages/SysTray-X.nl.qm | Bin 4696 -> 4841 bytes app/SysTray-X/languages/SysTray-X.nl.ts | 45 ++++---- app/SysTray-X/languages/SysTray-X.pl.ts | 45 ++++---- app/SysTray-X/languages/SysTray-X.pt-BR.qm | Bin 3992 -> 4257 bytes app/SysTray-X/languages/SysTray-X.pt-BR.ts | 49 +++++---- app/SysTray-X/languages/SysTray-X.ru.qm | Bin 4619 -> 4768 bytes app/SysTray-X/languages/SysTray-X.ru.ts | 45 ++++---- app/SysTray-X/languages/SysTray-X.sk.ts | 45 ++++---- app/SysTray-X/languages/SysTray-X.uk.ts | 45 ++++---- app/SysTray-X/languages/SysTray-X.zh-CN.ts | 45 ++++---- app/SysTray-X/languages/SysTray-X.zh-TW.ts | 45 ++++---- app/SysTray-X/preferences.cpp | 29 +++++ app/SysTray-X/preferences.h | 26 +++++ app/SysTray-X/preferences.ui | 15 ++- app/SysTray-X/preferencesdialog.cpp | 34 +++--- app/SysTray-X/preferencesdialog.h | 12 ++ app/SysTray-X/systrayx.cpp | 12 +- app/SysTray-X/systrayxlink.cpp | 121 +++++++++++++++++++-- app/SysTray-X/systrayxlink.h | 34 +++++- app/SysTray-X/windowctrl-unix.cpp | 94 +++++++++++++++- app/SysTray-X/windowctrl-unix.h | 36 ++++++ app/SysTray-X/windowctrl.cpp | 24 +++- app/SysTray-X/windowctrl.h | 5 + webext/_locales/de/messages.json | 5 + webext/_locales/el/messages.json | 5 + webext/_locales/en-US/messages.json | 23 ++-- webext/_locales/it/messages.json | 5 + webext/_locales/nl/messages.json | 5 + webext/_locales/pt-BR/messages.json | 5 + webext/_locales/ru/messages.json | 5 + webext/background.js | 31 +++++- webext/js/defaults.js | 44 +++++++- webext/options.html | 11 ++ webext/options.js | 61 ++++++++++- 46 files changed, 977 insertions(+), 389 deletions(-) diff --git a/app/SysTray-X/languages/SysTray-X.bg.ts b/app/SysTray-X/languages/SysTray-X.bg.ts index 613812f..552bd22 100644 --- a/app/SysTray-X/languages/SysTray-X.bg.ts +++ b/app/SysTray-X/languages/SysTray-X.bg.ts @@ -193,71 +193,74 @@ - + + Restore startup positions + + + + Number properties - + Display unread message count - + Number color - + Number size - + Count type - + Unread - + New - + Display debug window - - Minimize to tray - + Save - + Cancel - - + + Open Image - - + + Image Files (*.png *.jpg *.bmp) @@ -265,27 +268,27 @@ SysTrayX - + &Show/Hide - + &Preferences - + &About - + &Quit - + Close diff --git a/app/SysTray-X/languages/SysTray-X.de.qm b/app/SysTray-X/languages/SysTray-X.de.qm index 8326d5a8ac9ab1eb930dbc30bd6ed8a503c61769..b120f02576a8d45fb9e1bd5ccc7610b5409b8699 100644 GIT binary patch delta 262 zcmeyRGFxqe2;+{4qH0Qfc?{Y;EDQ_+{S3y!f(#4{iVR+6QyCao%pkNN-^5rwCIQ)r zz5a}=Cf?O!;_sTw%P7xyaI!9Ax!xl_+e6Gi&0c(|!paN`{EB=PYl|5ec(3x+P1^x9 z%#EMNs*izzV{Ik_gP_yqQ;aux>!TRl7*ZMX7>XH6fOHW<0Yg5JoeAV+0$F)rIR%Dt zATO061*{?iOhVM>Fyug0BmwD6hFk^(hG3xHM4(9}96&1>*nn6vD7CmGzbI9qxFoTt cq_jYxAip@XBr`v+n0@jlR;kU4`L8np01LK0s{jB1 delta 122 zcmbQO_Df}g2;+u{qH0RKR~fW>SQr@izcCmK3oJ z_WCmlPQ0tf#P@MBFQYu8#$;W_ay3sr+e6Gi%^Uerg_Ri?_&WINrtJV4;>OQo)yKfV Wu{M)|L15+PON=*pH@gU2X955#JRZ0J diff --git a/app/SysTray-X/languages/SysTray-X.de.ts b/app/SysTray-X/languages/SysTray-X.de.ts index 5e8b7fc..82af20a 100644 --- a/app/SysTray-X/languages/SysTray-X.de.ts +++ b/app/SysTray-X/languages/SysTray-X.de.ts @@ -157,6 +157,11 @@ Close Schließen + + + Restore startup positions + Fensterpositionen wiederherstellen beim Start + Minimize @@ -201,71 +206,69 @@ Beim Fensterschließen, Minimieren - + Number properties Nummereigenschaften - + Display unread message count Anzahl neuer Nachrichten anzeigen - + Number color Nummerfarbe - + Number size Nummergröße - + Count type E-Mail-Benachrichtigungstyp - + Unread Ungelesene Nachrichten - + New Neue Nachrichten - + Display debug window Debug-Fenster anzeigen - + Save Speichern - + Cancel Annullieren - - Minimize to tray Hauptfenster minimieren - - + + Open Image Bild öffnen - - + + Image Files (*.png *.jpg *.bmp) Bilddateien (*.png *.jpg *.bmp) @@ -273,27 +276,27 @@ SysTrayX - + &Show/Hide &Anzeigen/Verbergen - + &Preferences &Einstellungen - + &About &Über - + &Quit &Beenden - + Close Schließen diff --git a/app/SysTray-X/languages/SysTray-X.el.qm b/app/SysTray-X/languages/SysTray-X.el.qm index af4a695605d3ee3890364090fe42502dba1900c5..10dc409a5b2f3ce9b8ea0e0e5733fdea25354f74 100644 GIT binary patch delta 244 zcmX@5_ELR<2;+{4qH0R~77W@wEDQ{S$qdHAf(#4{iVR+6QyCaoN+7i0y@|28k5wN717~0+1A~yj=2MJI`D7!Qr!pU4-pITch>tPvXFkZhhCzXO2lHCy!^~SJ z7x0LB?Pop;6xjuoKLVCJ!n~b%FHmGFP;3|TdZ5njK(*UBfEF;Y0kLFIYH>+^QK~|5 eNn%k+X@NpPesN|=W`17rΕλαχιστοποιημένη εκκίνηση της εφαρμογής - + + Restore startup positions + Επαναφορά θέσεων παραθύρου κατά την εκκίνηση + + + Number properties Ιδιότητες αριθμών - + Display unread message count Προβολή μετρητή μη-αναγνωσμένης αλληλογραφίας - + Number color Χρώμα μετρητή: - + Number size Μέγεθος μετρητή: - + Count type Τύπος μετρητή μηνυμάτων - + Unread Μη αναγνωσμένα - + New Νέα - + Display debug window Προβολή παραθύρου αποσφαλμάτωσης - - Minimize to tray Ελαχιστοποίηση στην περιοχή ειδοποιήσεων - + Save Αποθήκευση - + Cancel Άκυρο - - + + Open Image Άνοιγμα εικόνας - - + + Image Files (*.png *.jpg *.bmp) Αρχεία εικόνας (*.png *.jpg *.bmp) @@ -269,27 +272,27 @@ SysTrayX - + &Show/Hide &Εμφάνιση/Απόκρυψη - + &Preferences &Προτιμήσεις - + &About &Σχετικά - + &Quit &Έξοδος - + Close Κλείσιμο diff --git a/app/SysTray-X/languages/SysTray-X.en-US.qm b/app/SysTray-X/languages/SysTray-X.en-US.qm index 85a0cd1c4013d2a8e3eaa02a527400fd5693abf3..2e021605b61c12e0fd3d2d900fe77a6420075b99 100644 GIT binary patch delta 242 zcmeyM_*ZFy2;+{4qH0RK3JlskEDQ|%f(*vOf(#4{iVR+6QyCaocpx-?#l%>B#)T7m z{g`-zCf?O!;?tYV%P7ahZ#!9+u}q&YjnDQFGXn$P1-?{aWd;V`lYA9xiy0VrX7kle z+W|Drji1M=kAZB)emRg= z0Hlk7A|*ha4-_v3ih*bau%1Mqo)U&qh5`UPd`4z8#Zw8OzjpAM)8AVg_pW=1Ub;W?Close Close + + + Restore startup positions + Restore window positions on startup + Minimize @@ -205,71 +210,69 @@ Minimize on close - + Number properties Number properties - + Display unread message count Display unread message count - + Number color Number color - + Number size Number size - + Count type Count type - + Unread Unread - + New New - + Display debug window Display debug window - + Save Save - + Cancel Cancel - - Minimize to tray Minimize to tray - - + + Open Image Open Image - - + + Image Files (*.png *.jpg *.bmp) Image Files (*.png *.jpg *.bmp) @@ -277,27 +280,27 @@ SysTrayX - + &Show/Hide &Show/Hide - + &Preferences &Preferences - + &About &About - + &Quit &Quit - + Close Close diff --git a/app/SysTray-X/languages/SysTray-X.es-AR.ts b/app/SysTray-X/languages/SysTray-X.es-AR.ts index d8b1924..d138391 100644 --- a/app/SysTray-X/languages/SysTray-X.es-AR.ts +++ b/app/SysTray-X/languages/SysTray-X.es-AR.ts @@ -193,71 +193,74 @@ - + + Restore startup positions + + + + Number properties - + Display unread message count - + Number color - + Number size - + Count type - + Unread - + New - + Display debug window - - Minimize to tray - + Save - + Cancel - - + + Open Image - - + + Image Files (*.png *.jpg *.bmp) @@ -265,27 +268,27 @@ SysTrayX - + &Show/Hide - + &Preferences - + &About - + &Quit - + Close diff --git a/app/SysTray-X/languages/SysTray-X.fr.ts b/app/SysTray-X/languages/SysTray-X.fr.ts index f390b42..0b2088e 100644 --- a/app/SysTray-X/languages/SysTray-X.fr.ts +++ b/app/SysTray-X/languages/SysTray-X.fr.ts @@ -193,71 +193,74 @@ - + + Restore startup positions + + + + Number properties - + Display unread message count - + Number color - + Number size - + Count type - + Unread - + New - + Display debug window - - Minimize to tray - + Save - + Cancel - - + + Open Image - - + + Image Files (*.png *.jpg *.bmp) @@ -265,27 +268,27 @@ SysTrayX - + &Show/Hide - + &Preferences - + &About - + &Quit - + Close diff --git a/app/SysTray-X/languages/SysTray-X.hr.ts b/app/SysTray-X/languages/SysTray-X.hr.ts index 46ebf1b..bfcdbe4 100644 --- a/app/SysTray-X/languages/SysTray-X.hr.ts +++ b/app/SysTray-X/languages/SysTray-X.hr.ts @@ -193,71 +193,74 @@ - + + Restore startup positions + + + + Number properties - + Display unread message count - + Number color - + Number size - + Count type - + Unread - + New - + Display debug window - - Minimize to tray - + Save - + Cancel - - + + Open Image - - + + Image Files (*.png *.jpg *.bmp) @@ -265,27 +268,27 @@ SysTrayX - + &Show/Hide - + &Preferences - + &About - + &Quit - + Close diff --git a/app/SysTray-X/languages/SysTray-X.it.qm b/app/SysTray-X/languages/SysTray-X.it.qm index 8da60c6601173e138921da1d76b8b96976cf0f27..ced60995fa2c06c97c6ad615dcc95fddf4b1d15d 100644 GIT binary patch delta 257 zcmX@5@=o&<<$C-0Y!5L5HCynd3M(@(@Qd?RtSx3>;62V)H*E*d zupoXOt3Cz>j_a8W41yAq1z5xh}fFU0!n#oWF#Q8v(OrTf_P$q{VXYxc2ag#(4i$NWzqYMavYB+$_F|Yx#WKe2x kNq$kPLUBoAQAufmLP36UW=Up#Uh(9MtkRpO@^57V04%IOssI20 delta 122 zcmeyUdP-%22;+u{qH0RK#~HMHSQr@iZ!j1O3o8Dl2) z`Z4kTo_JS}iSOZLUPgIFmdUz|Avvia applicazione minimizzata - + + Restore startup positions + Ripristina le posizioni della finestra all'avvio + + + Number properties Proprietà numero - + Display unread message count Mostra numero di messaggi non letti - + Number color Colore numero - + Number size Dimensione numero - + Count type Tipo conteggio - + Unread Non letti - + New Nuovi - + Display debug window Mostra finestra di debug - - Minimize to tray Minimizza nel vassoio - + Save Salva - + Cancel Annulla - - + + Open Image Apri immagine - - + + Image Files (*.png *.jpg *.bmp) File immagine (*.png *.jpg *.bmp) @@ -270,27 +273,27 @@ SysTrayX - + &Show/Hide &Mostra/Nascondi - + &Preferences &Preferenze - + &About &Informazioni - + &Quit &Esci - + Close Chiudi diff --git a/app/SysTray-X/languages/SysTray-X.nl.qm b/app/SysTray-X/languages/SysTray-X.nl.qm index ed5853d3d59a75bba461eef555fc11fae8d8a775..bfcb1ee8ef5ce38c5105b70eb375a09d3fb2c465 100644 GIT binary patch delta 244 zcmcbi@=|qz2;+{4qH0QfMGV?KEDQ_+$qdHAf(#4{iVR+6QyCaoG$6FVgNd>FjQ=P0 z`ZKPYcvp{!zhyEnqdeox$-0c?dWZOI4>1Gv>hPrsD>E?gYw}gBEoNZgeaTlhZ3oaS zH+~+gJ_ZJkwV4bIf&!aQF}~%^^J4H|NM$HuC}t=D(m4zY3}rw%56UlMC}7A3vNM6Q znLzPkpnMXLl?9~pfpQ>Si9p>Ty?Go!D;U^-STZQJxFo+QRiU^fv8bf9K%pSNII|=( RKd*T5K{n~l+xZtV0RSQmJbwTH delta 121 zcmaE VZ6*VQK>OxPjBj~2dk8FK0stCm9!>xN diff --git a/app/SysTray-X/languages/SysTray-X.nl.ts b/app/SysTray-X/languages/SysTray-X.nl.ts index 03d1146..892c42c 100644 --- a/app/SysTray-X/languages/SysTray-X.nl.ts +++ b/app/SysTray-X/languages/SysTray-X.nl.ts @@ -161,6 +161,11 @@ Close Sluiten + + + Restore startup positions + Herstel vensterposities bij opstarten + Minimize @@ -205,71 +210,69 @@ Minimaliseren bij sluiten - + Number properties Nummer opties - + Display unread message count Aantal ongelezen berichten weergeven - + Number color Nummer kleur - + Number size Nummer grootte - + Count type Type berichttelling - + Unread Ongelezen - + New Nieuw - + Display debug window Toon debug venster - + Save Bewaren - + Cancel Annnuleren - - Minimize to tray Minimaliseer naar systeemvak - - + + Open Image Open afbeelding - - + + Image Files (*.png *.jpg *.bmp) Afbeeldingsbestanden (*.png *.jpg *.bmp) @@ -277,27 +280,27 @@ SysTrayX - + &Show/Hide &Tonen/Verbergen - + &Preferences &Opties - + &About O&ver - + &Quit &Afsluiten - + Close Sluiten diff --git a/app/SysTray-X/languages/SysTray-X.pl.ts b/app/SysTray-X/languages/SysTray-X.pl.ts index 8f872b7..edb5062 100644 --- a/app/SysTray-X/languages/SysTray-X.pl.ts +++ b/app/SysTray-X/languages/SysTray-X.pl.ts @@ -193,71 +193,74 @@ - + + Restore startup positions + + + + Number properties - + Display unread message count - + Number color - + Number size - + Count type - + Unread - + New - + Display debug window - - Minimize to tray - + Save - + Cancel - - + + Open Image - - + + Image Files (*.png *.jpg *.bmp) @@ -265,27 +268,27 @@ SysTrayX - + &Show/Hide - + &Preferences - + &About - + &Quit - + Close diff --git a/app/SysTray-X/languages/SysTray-X.pt-BR.qm b/app/SysTray-X/languages/SysTray-X.pt-BR.qm index b7aeab458080746d84ffd43b451ff7d3d3383c79..87476f66be20412a45fa3c59aa3761acad9a0fd7 100644 GIT binary patch delta 451 zcmbOszff_4Nc{o^1_lEl1_2<=xPpNpThlWF<1BMc0@=b1ibOb3cHo@C~K_X%hr-^96QTwGGD(l1qj)>TZrtH;C} zF`1W9j)^aKvM!^3+-h$9?mD2t{oH~7R{~95$0L-|3bc`rXBOivpv!%DU436NFtBU! zv25E6v|$>b?IC6${f{qISQ%*KN4|=+#X$8d`RbD11QVD2E+osnR%JHnN_I@CHV>^MTwQ09l5qK)kiS|F{CmSGn6nSGL$kD z0m&i;1%?8Ke4tn+!*hnOU|9u*6rhX(Ll%(C1B&E;d3j(m6DX3&kPO6$K=Dk5Dj@xw v;W0x#+-k|7)Z&u-qEv2A!_Q{`lr8a-(S;zzc7O!mC delta 269 zcmZ3eI75DdNc{u`1_lEl1_2<=xPpNpoV&5d2{P`*8xq6=MhS21?pVKGmG&S(8WHyuD&lB7}&M=Shj5jnmm`! z_7F4BrL26Z!pcCSe(=>z+W~Zu8$XX#A5h(fOrYfR&AS*kacn-rHJfP@-$Et;16DuM diff --git a/app/SysTray-X/languages/SysTray-X.pt-BR.ts b/app/SysTray-X/languages/SysTray-X.pt-BR.ts index 2de63a1..fc21372 100644 --- a/app/SysTray-X/languages/SysTray-X.pt-BR.ts +++ b/app/SysTray-X/languages/SysTray-X.pt-BR.ts @@ -157,7 +157,12 @@ Close - Fechar + Fechar + + + + Restore startup positions + Restaurar posições da janela na inicialização @@ -205,71 +210,69 @@ Minimizar ao fechar - + Number properties Propriedades do número - + Display unread message count Exibir contador de mensagens não lidas - + Number color Cor do número - + Number size Tamanho do número - + Count type Tipo do contador - + Unread Não lidos - + New Novos - + Display debug window Mostrar janela de depuração - + Save Salvar - + Cancel Cancelar - - Minimize to tray - + Minimizar para a tray - - + + Open Image Abrir imagem - - + + Image Files (*.png *.jpg *.bmp) Arquivo de imagem (*.png *.jpg *.bmp) @@ -277,27 +280,27 @@ SysTrayX - + &Show/Hide &Exibir/Ocultar - + &Preferences &Preferências - + &About &Sobre - + &Quit &Sair - + Close Fechar diff --git a/app/SysTray-X/languages/SysTray-X.ru.qm b/app/SysTray-X/languages/SysTray-X.ru.qm index 79b903464d987cafe7eb95d450bd49c5ff2da96d..7c0e56d78a90b396560df85ecdd945ce41c1ad39 100644 GIT binary patch delta 264 zcmeBHS)e*WgmK42Q8gt#5eDrZ76t|ZNd{wKK?Vi}MFuaksSFG(F%VjyXJV{AClose При закрытии + + + Restore startup positions + Восстановить положение окон при запуске + Minimize @@ -203,71 +208,69 @@ Сворачивать при закрытии - + Number properties Настройки индикатора кол-ва - + Display unread message count Показывать кол-во непрочитанных писем - + Number color Цвет шрифта - + Number size Размер шрифта - + Count type Вариант подсчета - + Unread Непрочитанные - + New Новые - + Display debug window Показать окно отладки - + Save Сохранить - + Cancel Отменить - - Minimize to tray Свернуть в трей - - + + Open Image Открыть изображение - - + + Image Files (*.png *.jpg *.bmp) Файлы изображений (*.png *.jpg *.bmp @@ -275,28 +278,28 @@ SysTrayX - + &Show/Hide Not sure how hotkeys work Показать/Скр&ыть - + &Preferences Настройки - + &About О приложении - + &Quit Выход - + Close Закрыть diff --git a/app/SysTray-X/languages/SysTray-X.sk.ts b/app/SysTray-X/languages/SysTray-X.sk.ts index be33da3..53dce67 100644 --- a/app/SysTray-X/languages/SysTray-X.sk.ts +++ b/app/SysTray-X/languages/SysTray-X.sk.ts @@ -193,71 +193,74 @@ - + + Restore startup positions + + + + Number properties - + Display unread message count - + Number color - + Number size - + Count type - + Unread - + New - + Display debug window - - Minimize to tray - + Save - + Cancel - - + + Open Image - - + + Image Files (*.png *.jpg *.bmp) @@ -265,27 +268,27 @@ SysTrayX - + &Show/Hide - + &Preferences - + &About - + &Quit - + Close diff --git a/app/SysTray-X/languages/SysTray-X.uk.ts b/app/SysTray-X/languages/SysTray-X.uk.ts index d9089c2..28185a2 100644 --- a/app/SysTray-X/languages/SysTray-X.uk.ts +++ b/app/SysTray-X/languages/SysTray-X.uk.ts @@ -193,71 +193,74 @@ - + + Restore startup positions + + + + Number properties - + Display unread message count - + Number color - + Number size - + Count type - + Unread - + New - + Display debug window - - Minimize to tray - + Save - + Cancel - - + + Open Image - - + + Image Files (*.png *.jpg *.bmp) @@ -265,27 +268,27 @@ SysTrayX - + &Show/Hide - + &Preferences - + &About - + &Quit - + Close diff --git a/app/SysTray-X/languages/SysTray-X.zh-CN.ts b/app/SysTray-X/languages/SysTray-X.zh-CN.ts index 0b3ae67..aa076ce 100644 --- a/app/SysTray-X/languages/SysTray-X.zh-CN.ts +++ b/app/SysTray-X/languages/SysTray-X.zh-CN.ts @@ -193,71 +193,74 @@ - + + Restore startup positions + + + + Number properties - + Display unread message count - + Number color - + Number size - + Count type - + Unread - + New - + Display debug window - - Minimize to tray - + Save - + Cancel - - + + Open Image - - + + Image Files (*.png *.jpg *.bmp) @@ -265,27 +268,27 @@ SysTrayX - + &Show/Hide - + &Preferences - + &About - + &Quit - + Close diff --git a/app/SysTray-X/languages/SysTray-X.zh-TW.ts b/app/SysTray-X/languages/SysTray-X.zh-TW.ts index 699fe39..65ec4f2 100644 --- a/app/SysTray-X/languages/SysTray-X.zh-TW.ts +++ b/app/SysTray-X/languages/SysTray-X.zh-TW.ts @@ -193,71 +193,74 @@ - + + Restore startup positions + + + + Number properties - + Display unread message count - + Number color - + Number size - + Count type - + Unread - + New - + Display debug window - - Minimize to tray - + Save - + Cancel - - + + Open Image - - + + Image Files (*.png *.jpg *.bmp) @@ -265,27 +268,27 @@ SysTrayX - + &Show/Hide - + &Preferences - + &About - + &Quit - + Close diff --git a/app/SysTray-X/preferences.cpp b/app/SysTray-X/preferences.cpp index 44fb845..47fd106 100644 --- a/app/SysTray-X/preferences.cpp +++ b/app/SysTray-X/preferences.cpp @@ -23,6 +23,7 @@ const QString Preferences::STATE_MAXIMIZED_STR = "maximized"; const QString Preferences::STATE_FULLSCREEN_STR = "fullscreen"; const QString Preferences::STATE_DOCKED_STR = "docked"; const QString Preferences::STATE_MINIMIZED_ALL_STR = "minimized_all"; +const QString Preferences::STATE_MINIMIZED_ALL_STARTUP_STR = "minimized_all_startup"; /** @@ -53,6 +54,8 @@ Preferences::Preferences( QObject *parent ) : QObject( parent ) m_start_minimized = false; m_close_type = PREF_MINIMIZE_MAIN_CLOSE_CHILDREN_WINDOWS; + m_restore_window_positions = false; + m_debug = false; m_version_major = QLatin1String( APP_VERSION_MAJOR ); @@ -473,6 +476,32 @@ void Preferences::setStartMinimized( bool state ) } +/* + * Get the start minmized pref. + */ +bool Preferences::getRestoreWindowPositions() const +{ + return m_restore_window_positions; +} + + +/* + * Set the start minimized pref. + */ +void Preferences::setRestoreWindowPositions( bool state ) +{ + if( m_restore_window_positions != state ) + { + m_restore_window_positions = state; + + /* + * Tell the world the new preference + */ + emit signalRestoreWindowPositionsChange(); + } +} + + /* * Get the close type pref. */ diff --git a/app/SysTray-X/preferences.h b/app/SysTray-X/preferences.h index 298cb45..60009f7 100644 --- a/app/SysTray-X/preferences.h +++ b/app/SysTray-X/preferences.h @@ -74,6 +74,7 @@ class Preferences : public QObject STATE_FULLSCREEN, STATE_DOCKED, STATE_MINIMIZED_ALL, + STATE_MINIMIZED_ALL_STARTUP, }; static const QString STATE_NORMAL_STR; @@ -82,6 +83,7 @@ class Preferences : public QObject static const QString STATE_FULLSCREEN_STR; static const QString STATE_DOCKED_STR; static const QString STATE_MINIMIZED_ALL_STR; + static const QString STATE_MINIMIZED_ALL_STARTUP_STR; public: @@ -335,6 +337,20 @@ class Preferences : public QObject */ void setStartMinimized( bool state ); + /** + * @brief getRestoreWindowPositions. Get the restore window positions state. + * + * @return The state. + */ + bool getRestoreWindowPositions() const; + + /** + * @brief setRestoreWindowPositions. Set the restore window positions state. + * + * @param The state. + */ + void setRestoreWindowPositions( bool state ); + /** * @brief getCloseType. Get the close type. * @@ -455,6 +471,11 @@ class Preferences : public QObject */ void signalStartMinimizedChange(); + /** + * @brief signalRestoreWindowPositionsChange. Signal a restore window positions state change. + */ + void signalRestoreWindowPositionsChange(); + /** * @brief signalCloseTypeChange. Signal a close type change. */ @@ -552,6 +573,11 @@ class Preferences : public QObject */ bool m_start_minimized; + /** + * @brief m_restore_window_positions. Force the same window positions on startup as recorded on the last hide. + */ + bool m_restore_window_positions; + /** * @brief m_close_type. Closing type for TB. */ diff --git a/app/SysTray-X/preferences.ui b/app/SysTray-X/preferences.ui index 25a5564..b1f1888 100644 --- a/app/SysTray-X/preferences.ui +++ b/app/SysTray-X/preferences.ui @@ -388,6 +388,13 @@ + + + + Restore startup positions + + + @@ -559,10 +566,10 @@ - - - - + + + + diff --git a/app/SysTray-X/preferencesdialog.cpp b/app/SysTray-X/preferencesdialog.cpp index 7bbb467..ac18b43 100644 --- a/app/SysTray-X/preferencesdialog.cpp +++ b/app/SysTray-X/preferencesdialog.cpp @@ -48,21 +48,8 @@ PreferencesDialog::PreferencesDialog( SysTrayXLink *link, Preferences *pref, QWi #ifdef Q_OS_WIN -#ifdef OBSOLETE - m_ui->minimizeMethod1RadioButton->setText( tr( "Minimize to tray" ) ); - m_ui->minimizeMethod2RadioButton->hide(); -#endif - m_ui->hideDefaultIconCheckBox->hide(); - -#endif - -#ifdef Q_OS_LINUX - -#ifdef OBSOLETE - m_ui->minimizeMethod1RadioButton->setText( tr( "Minimize to tray" ) ); - m_ui->minimizeMethod2RadioButton->hide(); -#endif + m_ui->restorePositionscheckBox->hide(); #endif @@ -175,6 +162,15 @@ void PreferencesDialog::setStartMinimized( bool state ) } +/* + * Set the restore window positions state + */ +void PreferencesDialog::setRestoreWindowPositions( bool state ) +{ + m_ui->restorePositionscheckBox->setChecked( state ); +} + + /* * Set the minimize on close state */ @@ -348,6 +344,7 @@ void PreferencesDialog::slotAccept() m_pref->setMinimizeType( static_cast< Preferences::MinimizeType >( m_ui->minimizeTypeGroup->checkedId() ) ); m_pref->setStartMinimized( m_ui->startMinimizedCheckBox->isChecked() ); + m_pref->setRestoreWindowPositions( m_ui->restorePositionscheckBox->isChecked() ); m_pref->setCloseType( static_cast< Preferences::CloseType >( m_ui->closeTypeGroup->checkedId() ) ); m_pref->setShowNumber( m_ui->showNumberCheckBox->isChecked() ); @@ -393,6 +390,7 @@ void PreferencesDialog::slotReject() setMinimizeType( m_pref->getMinimizeType() ); setStartMinimized( m_pref->getStartMinimized() ); + setRestoreWindowPositions( m_pref->getRestoreWindowPositions() ); setCloseType( m_pref->getCloseType() ); setShowNumber( m_pref->getShowNumber() ); @@ -495,6 +493,14 @@ void PreferencesDialog::slotStartMinimizedChange() } +/* + * Handle the restore window positions change signal + */ +void PreferencesDialog::slotRestoreWindowPositionsChange() +{ + setRestoreWindowPositions( m_pref->getRestoreWindowPositions() ); +} + /* * Handle the minimize on close change signal */ diff --git a/app/SysTray-X/preferencesdialog.h b/app/SysTray-X/preferencesdialog.h index 5212b1b..a556fb1 100644 --- a/app/SysTray-X/preferencesdialog.h +++ b/app/SysTray-X/preferencesdialog.h @@ -69,6 +69,13 @@ class PreferencesDialog : public QDialog */ void setStartMinimized( bool state ); + /** + * @brief setRestoreWindowPositions. Set the restore window positions state. + * + * @param state The state. + */ + void setRestoreWindowPositions( bool state ); + /** * @brief setCloseType. Set the close type. * @@ -182,6 +189,11 @@ class PreferencesDialog : public QDialog */ void slotStartMinimizedChange(); + /** + * @brief slotRestoreWindowPositionsChange. Slot for handling restore window positions change signals. + */ + void slotRestoreWindowPositionsChange(); + /** * @brief slotCloseTypeChange. Slot for handling close type change signals. */ diff --git a/app/SysTray-X/systrayx.cpp b/app/SysTray-X/systrayx.cpp index f509a89..060cbcc 100644 --- a/app/SysTray-X/systrayx.cpp +++ b/app/SysTray-X/systrayx.cpp @@ -98,7 +98,7 @@ SysTrayX::SysTrayX( QObject *parent ) : QObject( parent ) #ifdef Q_OS_UNIX - connect( m_win_ctrl, &WindowCtrl::signalHideDefaultIconChange, this, &SysTrayX::slotSelectIconObject ); + // connect( m_win_ctrl, &WindowCtrl::signalHideDefaultIconChange, this, &SysTrayX::slotSelectIconObject ); #endif @@ -121,6 +121,7 @@ SysTrayX::SysTrayX( QObject *parent ) : QObject( parent ) connect( m_preferences, &Preferences::signalCountTypeChange, m_pref_dialog, &PreferencesDialog::slotCountTypeChange ); connect( m_preferences, &Preferences::signalMinimizeTypeChange, m_pref_dialog, &PreferencesDialog::slotMinimizeTypeChange ); connect( m_preferences, &Preferences::signalStartMinimizedChange, m_pref_dialog, &PreferencesDialog::slotStartMinimizedChange ); + connect( m_preferences, &Preferences::signalRestoreWindowPositionsChange, m_pref_dialog, &PreferencesDialog::slotRestoreWindowPositionsChange ); connect( m_preferences, &Preferences::signalCloseTypeChange, m_pref_dialog, &PreferencesDialog::slotCloseTypeChange ); connect( m_preferences, &Preferences::signalDebugChange, m_pref_dialog, &PreferencesDialog::slotDebugChange ); @@ -135,6 +136,7 @@ SysTrayX::SysTrayX( QObject *parent ) : QObject( parent ) connect( m_preferences, &Preferences::signalCountTypeChange, m_link, &SysTrayXLink::slotCountTypeChange ); connect( m_preferences, &Preferences::signalMinimizeTypeChange, m_link, &SysTrayXLink::slotMinimizeTypeChange ); connect( m_preferences, &Preferences::signalStartMinimizedChange, m_link, &SysTrayXLink::slotStartMinimizedChange ); + connect( m_preferences, &Preferences::signalRestoreWindowPositionsChange, m_link, &SysTrayXLink::slotRestoreWindowPositionsChange ); connect( m_preferences, &Preferences::signalCloseTypeChange, m_link, &SysTrayXLink::slotCloseTypeChange ); connect( m_preferences, &Preferences::signalDebugChange, m_link, &SysTrayXLink::slotDebugChange ); connect( m_preferences, &Preferences::signalHideDefaultIconChange, this, &SysTrayX::slotSelectIconObjectPref ); @@ -152,6 +154,14 @@ SysTrayX::SysTrayX( QObject *parent ) : QObject( parent ) connect( m_link, &SysTrayXLink::signalKdeIntegration, this, &SysTrayX::slotSelectIconObject ); connect( m_link, &SysTrayXLink::signalLocale, this, &SysTrayX::slotLoadLanguage ); +#ifdef Q_OS_UNIX + + connect( m_link, &SysTrayXLink::signalWindowPositions, m_win_ctrl, &WindowCtrl::slotPositions ); + + connect( m_win_ctrl, &WindowCtrl::signalPositions, m_link, &SysTrayXLink::slotPositions ); + +#endif + /* * SysTrayX */ diff --git a/app/SysTray-X/systrayxlink.cpp b/app/SysTray-X/systrayxlink.cpp index 966046e..990b8f0 100644 --- a/app/SysTray-X/systrayxlink.cpp +++ b/app/SysTray-X/systrayxlink.cpp @@ -27,6 +27,7 @@ #include #include #include +#include /***************************************************************************** @@ -116,16 +117,11 @@ void SysTrayXLinkReader::slotWorker() QByteArray data( data_len, 0 ); std::cin.read( data.data(), data_len ); - /* - * Send the data to my parent - */ - emit signalReceivedMessage( data ); - - /* - * Send the data to my parent - */ if( data.at( 0 ) == '{' ) - { + { + /* + * Send the data to my parent + */ emit signalReceivedMessage( data ); error_count = 0; @@ -270,6 +266,37 @@ void SysTrayXLink::sendDisableKdeIntegration() } +/* + * Send the window positions to the add-on + */ +void SysTrayXLink::sendPositions( QList< QPoint > positions ) +{ + QJsonArray positionsArray; + + for( int i = 0; i < positions.length(); ++i ) + { + QJsonObject positionObject; + positionObject.insert("x", QString::number( positions.at( i ).x() ) ); + positionObject.insert("y", QString::number( positions.at( i ).y() ) ); + + positionsArray.append( positionObject ); + } + + QJsonObject positionsObject; + positionsObject.insert("positions", positionsArray ); + + /* + * Store the new document + */ + QJsonDocument json_doc = QJsonDocument( positionsObject ); + + /* + * Send it to the add-on + */ + linkWrite( json_doc.toJson( QJsonDocument::Compact ) ); +} + + /* * Decode JSON message */ @@ -342,6 +369,11 @@ void SysTrayXLink::DecodeMessage( const QByteArray& message ) window_state = Preferences::STATE_MINIMIZED_ALL; } else + if( window_state_str == Preferences::STATE_MINIMIZED_ALL_STARTUP_STR ) + { + window_state = Preferences::STATE_MINIMIZED_ALL_STARTUP; + } + else { /* * Unknown state @@ -385,6 +417,11 @@ void SysTrayXLink::DecodeMessage( const QByteArray& message ) DecodeBrowser( jsonObject[ "browserInfo" ].toObject() ); } + if( jsonObject.contains( "positions" ) && jsonObject[ "positions" ].isArray() ) + { + DecodePositions( jsonObject[ "positions" ].toArray() ); + } + if( jsonObject.contains( "preferences" ) && jsonObject[ "preferences" ].isObject() ) { DecodePreferences( jsonObject[ "preferences" ].toObject() ); @@ -483,6 +520,41 @@ void SysTrayXLink::DecodeBrowser( const QJsonObject& browser ) } +/* + * Decode positions from JSON message + */ +void SysTrayXLink::DecodePositions( const QJsonArray& positions ) +{ + QList< QPoint > window_positions; + for( int i = 0; i < positions.count(); ++i ) + { + QJsonObject positionObject = positions.at( i ).toObject(); + + QPoint position; + bool valid_x = false; + bool valid_y = false; + if( positionObject.contains( "x" ) && positionObject[ "x" ].isString() ) + { + position.setX( positionObject[ "x" ].toString().toInt() ); + valid_x = true; + } + + if( positionObject.contains( "y" ) && positionObject[ "y" ].isString() ) + { + position.setY( positionObject[ "y" ].toString().toInt() ); + valid_y = true; + } + + if( valid_x && valid_y ) + { + window_positions.append( position ); + } + } + + emit signalWindowPositions( window_positions ); +} + + /* * Decode preferences from JSON message */ @@ -526,7 +598,7 @@ void SysTrayXLink::DecodePreferences( const QJsonObject& pref ) bool hide_default_icon = pref[ "hideDefaultIcon" ].toString() == "true"; /* - * Store the new start minimized state + * Store the new hide default icon state */ m_pref->setHideDefaultIcon( hide_default_icon ); } @@ -620,6 +692,16 @@ void SysTrayXLink::DecodePreferences( const QJsonObject& pref ) m_pref->setStartMinimized( start_minimized ); } + if( pref.contains( "restorePositions" ) && pref[ "restorePositions" ].isString() ) + { + bool resore_window_positions = pref[ "restorePositions" ].toString() == "true"; + + /* + * Store the new restore window positions state + */ + m_pref->setRestoreWindowPositions( resore_window_positions ); + } + if( pref.contains( "closeType" ) && pref[ "closeType" ].isString() ) { Preferences::CloseType close_type = static_cast< Preferences::CloseType >( pref[ "closeType" ].toString().toInt() ); @@ -654,6 +736,7 @@ void SysTrayXLink::EncodePreferences( const Preferences& pref ) prefObject.insert("debug", QJsonValue::fromVariant( QString( pref.getDebug() ? "true" : "false" ) ) ); prefObject.insert("minimizeType", QJsonValue::fromVariant( QString::number( pref.getMinimizeType() ) ) ); prefObject.insert("startMinimized", QJsonValue::fromVariant( QString( pref.getStartMinimized() ? "true" : "false" ) ) ); + prefObject.insert("restorePositions", QJsonValue::fromVariant( QString( pref.getRestoreWindowPositions() ? "true" : "false" ) ) ); prefObject.insert("closeType", QJsonValue::fromVariant( QString::number( pref.getCloseType() ) ) ); prefObject.insert("defaultIconType", QJsonValue::fromVariant( QString::number( pref.getDefaultIconType() ) ) ); prefObject.insert("defaultIconMime", QJsonValue::fromVariant( pref.getDefaultIconMime() ) ); @@ -734,6 +817,18 @@ void SysTrayXLink::slotStartMinimizedChange() } +/* + * Handle a restore window positions state change signal + */ +void SysTrayXLink::slotRestoreWindowPositionsChange() +{ + if( m_pref->getAppPrefChanged() ) + { + sendPreferences(); + } +} + + /* * Handle a close type change signal */ @@ -852,3 +947,9 @@ void SysTrayXLink::slotCountTypeChange() sendPreferences(); } } + + +void SysTrayXLink::slotPositions( QList< QPoint > positions ) +{ + sendPositions( positions ); +} diff --git a/app/SysTray-X/systrayxlink.h b/app/SysTray-X/systrayxlink.h index 5917db3..d8e3808 100644 --- a/app/SysTray-X/systrayxlink.h +++ b/app/SysTray-X/systrayxlink.h @@ -13,7 +13,8 @@ */ #include #include - +#include +#include /* * Predefines @@ -120,6 +121,13 @@ class SysTrayXLink : public QObject */ void sendDisableKdeIntegration(); + /** + * @brief sendPositions + * + * @param positions List of the positions of the TB windows + */ + void sendPositions( QList< QPoint > positions ); + private: /** @@ -150,6 +158,13 @@ class SysTrayXLink : public QObject */ void DecodePreferences( const QJsonObject& pref ); + /** + * @brief DecodePositions + * + * @param positions The JSON positions. + */ + void DecodePositions( const QJsonArray& positions ); + /** * @brief EncodePreferences. Encode the preferences into a JSON document. * @@ -210,6 +225,13 @@ class SysTrayXLink : public QObject */ void signalUnreadMail( int unread_mail ); + /** + * @brief signalWindowPositions. Signal the startup positions. + * + * @param window_positions The list with positions. + */ + void signalWindowPositions( QList< QPoint > window_positions ); + public slots: /** @@ -227,6 +249,11 @@ class SysTrayXLink : public QObject */ void slotStartMinimizedChange(); + /** + * @brief slotRestoreWindowPositionsChange. Handle a change in restore window positions state. + */ + void slotRestoreWindowPositionsChange(); + /** * @brief slotCloseTypeChange. Slot for handling close type change signals. */ @@ -277,6 +304,11 @@ class SysTrayXLink : public QObject */ void slotCountTypeChange(); + /** + * @brief slotPositions. Slot for handling a window positions change. + */ + void slotPositions( QList< QPoint > positions ); + private slots: /** diff --git a/app/SysTray-X/windowctrl-unix.cpp b/app/SysTray-X/windowctrl-unix.cpp index f3a20a5..4db6e31 100644 --- a/app/SysTray-X/windowctrl-unix.cpp +++ b/app/SysTray-X/windowctrl-unix.cpp @@ -20,6 +20,7 @@ WindowCtrlUnix::WindowCtrlUnix( QObject *parent ) : QObject( parent ) * Initialize */ m_tb_windows = QList< quint64 >(); + m_tb_windows_pos = QList< QPoint >(); m_tb_window_states = QList< Preferences::WindowState >();; /* @@ -196,7 +197,6 @@ void WindowCtrlUnix::findWindows( qint64 pid ) else { m_tb_window_states.append( Preferences::STATE_NORMAL ); - } } } @@ -321,6 +321,38 @@ QList< quint64 > WindowCtrlUnix::getWinIds() } +/* + * Get window positions + */ +void WindowCtrlUnix::updatePositions() +{ + QList< QPoint > positions; + for( int i = 0 ; i < m_tb_windows.length() ; ++i ) + { + quint64 window = m_tb_windows.at( i ); + + // Get border / title bar sizes + QMargins margin = atomFrameExtents( m_display, window ); + + int x, y; + Window child; + XWindowAttributes xwa; + Window win = static_cast( window ); + XTranslateCoordinates( m_display, win, m_root_window, 0, 0, &x, &y, &child ); + XGetWindowAttributes( m_display, win, &xwa ); + + positions.append( QPoint( x - xwa.x - margin.left(), y - xwa.y - margin.top() ) ); + } + + if( m_tb_windows_pos != positions ) + { + m_tb_windows_pos = positions; + + emit signalPositions( m_tb_windows_pos ); + } +} + + /* * Minimize a window */ @@ -437,6 +469,24 @@ void WindowCtrlUnix::deleteWindow( quint64 window ) } +/* + * Set the window positions + */ +void WindowCtrlUnix::setPositions( QList< QPoint > window_positions ) +{ + for( int i = 0 ; i < m_tb_windows.length() ; ++i ) + { + quint64 window = m_tb_windows.at( i ); + + if( i < window_positions.length() ) { + XMoveWindow( m_display, window, window_positions.at( i ).x(), window_positions.at( i ).y() ); + } + } + + XFlush( m_display ); +} + + /* * Hide window to system tray */ @@ -755,4 +805,46 @@ QStringList WindowCtrlUnix::atomWindowType( Display *display, quint64 window return states; } + +/* + * Get the title of the window + */ +QMargins WindowCtrlUnix::atomFrameExtents( Display *display, quint64 window ) +{ + char prop_name[] = "_NET_FRAME_EXTENTS"; + Atom prop = XInternAtom( display, prop_name, True ); + + Atom type; + int format; + unsigned long remain; + unsigned long len; + unsigned char* list = nullptr; + XEvent event; + + // Get the frame extentions + while( XGetWindowProperty( display, window, prop, 0, 4, False, AnyPropertyType, + &type, &format, &len, &remain, &list ) != Success || len != 4 || remain != 0 ) + { + XNextEvent( display, &event ); + } + + QMargins margins; + if( list && len == 4 ) + { + long* extents = (long*)list; + margins.setLeft( extents[ 0 ] ); + margins.setRight( extents[ 1 ] ); + margins.setTop( extents[ 2 ] ); + margins.setBottom( extents[ 3 ] ); + } + + if( list ) + { + XFree( list ); + } + + return margins; +} + + #endif // Q_OS_UNIX diff --git a/app/SysTray-X/windowctrl-unix.h b/app/SysTray-X/windowctrl-unix.h index ade8a67..588018c 100644 --- a/app/SysTray-X/windowctrl-unix.h +++ b/app/SysTray-X/windowctrl-unix.h @@ -18,6 +18,8 @@ */ #include #include +#include +#include /* * Predefines @@ -216,6 +218,11 @@ class WindowCtrlUnix : public QObject */ QList< quint64 > getWinIds(); + /** + * @brief updatePositions. Update the window positions. + */ + void updatePositions(); + /** * @brief minimizeWindow. Minimize window. * @@ -246,6 +253,13 @@ class WindowCtrlUnix : public QObject */ void deleteWindow( quint64 window ); + /** + * @brief setPositions. Set the startup positions. + * + * @param window_positions The window positions list. + */ + void setPositions( QList< QPoint > window_positions ); + private: /** @@ -329,6 +343,16 @@ class WindowCtrlUnix : public QObject */ QStringList atomWindowType( Display* display, quint64 window ); + /** + * @brief atomFrameExtents. Get the frame extents of the window. + * + * @param display The display + * @param window The window + * + * @return Type of the window. + */ + QMargins atomFrameExtents( Display *display, quint64 window ); + signals: /** @@ -338,6 +362,13 @@ class WindowCtrlUnix : public QObject */ void signalConsole( QString message ); + /** + * @brief signalPosition. Signal the new window position. + * + * @param position + */ + void signalPositions( QList< QPoint > positions ); + private: /** @@ -360,6 +391,11 @@ class WindowCtrlUnix : public QObject */ QList< quint64 > m_tb_windows; + /** + * @brief m_tb_windows_pos. The Thunderbird window positions. + */ + QList< QPoint > m_tb_windows_pos; + /** * @brief m_tb_window_states. The Thunderbird window states. */ diff --git a/app/SysTray-X/windowctrl.cpp b/app/SysTray-X/windowctrl.cpp index 24e9cfb..fc9e999 100644 --- a/app/SysTray-X/windowctrl.cpp +++ b/app/SysTray-X/windowctrl.cpp @@ -164,10 +164,15 @@ void WindowCtrl::slotWindowState( Preferences::WindowState state ) /* * Minimize all? */ - if( state == Preferences::STATE_MINIMIZED_ALL ) + if( state == Preferences::STATE_MINIMIZED_ALL || state == Preferences::STATE_MINIMIZED_ALL_STARTUP ) { // emit signalConsole( QString( "Minimize all" ) ); + if( state == Preferences::STATE_MINIMIZED_ALL ) + { + updatePositions(); + } + /* * Close pressed on one of the windows, minimize them all */ @@ -207,7 +212,7 @@ void WindowCtrl::slotWindowState( Preferences::WindowState state ) /* * Minimize all? */ - if( state == Preferences::STATE_MINIMIZED_ALL ) + if( state == Preferences::STATE_MINIMIZED_ALL || state == Preferences::STATE_MINIMIZED_ALL_STARTUP ) { // emit signalConsole( QString( "Minimize all" ) ); @@ -247,6 +252,8 @@ void WindowCtrl::slotShowHide() for( int i = 0 ; i < win_ids.length() ; ++i ) { + updatePositions(); + if( win_states.at( i ) == Preferences::STATE_MINIMIZED ) { // emit signalConsole( QString( "Show %1" ).arg( win_ids.at( i ) ) ); @@ -289,3 +296,16 @@ void WindowCtrl::slotClose() deleteWindow( win_ids.at( i ) ); } } + + +/* + * Handle the startup window posiions. + */ +void WindowCtrl::slotPositions( QList< QPoint > window_positions ) +{ +#ifdef Q_OS_UNIX + + setPositions( window_positions ); + +#endif +} diff --git a/app/SysTray-X/windowctrl.h b/app/SysTray-X/windowctrl.h index 67b50f7..9c81eb4 100644 --- a/app/SysTray-X/windowctrl.h +++ b/app/SysTray-X/windowctrl.h @@ -98,6 +98,11 @@ class WindowCtrl : public QObject */ void slotClose(); + /** + * @brief slotPositions. Slot for handling of the startup window posiions. + */ + void slotPositions( QList< QPoint > window_positions ); + private: /** diff --git a/webext/_locales/de/messages.json b/webext/_locales/de/messages.json index b226d9d..bbef320 100644 --- a/webext/_locales/de/messages.json +++ b/webext/_locales/de/messages.json @@ -99,6 +99,11 @@ "description": "Start minimized" }, + "restore_positions_on_startup": { + "message": "Fensterpositionen wiederherstellen beim Start", + "description": "Restore the window positions on startup" + }, + "icons": { "message": "Symbole", "description": "Title for Icons options" diff --git a/webext/_locales/el/messages.json b/webext/_locales/el/messages.json index b462be5..ae76469 100644 --- a/webext/_locales/el/messages.json +++ b/webext/_locales/el/messages.json @@ -99,6 +99,11 @@ "description": "Start minimized" }, + "restore_positions_on_startup": { + "message": "Επαναφορά θέσεων παραθύρου κατά την εκκίνηση", + "description": "Restore the window positions on startup" + }, + "icons": { "message": "Εικονίδια", "description": "Title for Icons options" diff --git a/webext/_locales/en-US/messages.json b/webext/_locales/en-US/messages.json index e43ac7d..1bf8803 100644 --- a/webext/_locales/en-US/messages.json +++ b/webext/_locales/en-US/messages.json @@ -99,6 +99,11 @@ "description": "Start minimized" }, + "restore_positions_on_startup": { + "message": "Restore window positions on startup", + "description": "Restore the window positions on startup" + }, + "icons": { "message": "Icons", "description": "Title for Icons options" @@ -233,22 +238,22 @@ "message": "SysTray-X Companion App by Ximi1970", "description": "Line 1" }, - + "about_version": { "message": "Version:", "description": "Version" }, - + "about_build": { "message": "Build:", "description": "Build" }, - + "about_hash": { "message": "Hash:", "description": "Hash" }, - + "about_branch": { "message": "Branch:", "description": "Branch" @@ -303,12 +308,12 @@ "message": "Close", "description": "Close button" }, - + "mail_notification_icon": { "message": "Mail notification icon", "description": "Mail icon selection title" }, - + "number_properties": { "message": "Number properties", "description": "Number properties title" @@ -318,17 +323,17 @@ "message": "Open image", "description": "File image dialog" }, - + "image_files": { "message": "Image Files (*.png *.jpg *.bmp)", "description": "File image selection" }, - + "image_save": { "message": "Save", "description": "File image save" }, - + "image_cancel": { "message": "Cancel", "description": "File image cancel" diff --git a/webext/_locales/it/messages.json b/webext/_locales/it/messages.json index 625fb76..2924336 100644 --- a/webext/_locales/it/messages.json +++ b/webext/_locales/it/messages.json @@ -99,6 +99,11 @@ "description": "Start minimized" }, + "restore_positions_on_startup": { + "message": "Ripristina le posizioni della finestra all'avvio", + "description": "Restore the window positions on startup" + }, + "icons": { "message": "Icona", "description": "Title for Icons options" diff --git a/webext/_locales/nl/messages.json b/webext/_locales/nl/messages.json index 81a54b7..5c02b33 100644 --- a/webext/_locales/nl/messages.json +++ b/webext/_locales/nl/messages.json @@ -99,6 +99,11 @@ "description": "Start minimized" }, + "restore_positions_on_startup": { + "message": "Herstel vensterposities bij opstarten", + "description": "Restore the window positions on startup" + }, + "icons": { "message": "Pictogrammen", "description": "Title for Icons options" diff --git a/webext/_locales/pt-BR/messages.json b/webext/_locales/pt-BR/messages.json index 2a77190..9fcb25f 100644 --- a/webext/_locales/pt-BR/messages.json +++ b/webext/_locales/pt-BR/messages.json @@ -99,6 +99,11 @@ "description": "Start minimized" }, + "restore_positions_on_startup": { + "message": "Restaurar posições da janela na inicialização", + "description": "Restore the window positions on startup" + }, + "icons": { "message": "Ícones", "description": "Title for Icons options" diff --git a/webext/_locales/ru/messages.json b/webext/_locales/ru/messages.json index 0922822..6523aa9 100644 --- a/webext/_locales/ru/messages.json +++ b/webext/_locales/ru/messages.json @@ -99,6 +99,11 @@ "description": "Start minimized" }, + "restore_positions_on_startup": { + "message": "Восстановить положение окон при запуске", + "description": "Restore the window positions on startup" + }, + "icons": { "message": "Иконка", "description": "Title for Icons options" diff --git a/webext/background.js b/webext/background.js index 9dca769..b3b8588 100644 --- a/webext/background.js +++ b/webext/background.js @@ -3,6 +3,9 @@ var SysTrayX = { startupState: undefined, + restorePositions: false, + startupWindowPositions: [], + hideDefaultIcon: false, platformInfo: undefined, @@ -22,7 +25,14 @@ SysTrayX.Messaging = { init: function () { // Minimuze on startup handled by Companion app as backup if (SysTrayX.startupState == "minimized") { - SysTrayX.Link.postSysTrayXMessage({ window: "minimized_all" }); + SysTrayX.Link.postSysTrayXMessage({ window: "minimized_all_startup" }); + } + + // Send the startup positions? + if (SysTrayX.restorePositions) { + SysTrayX.Link.postSysTrayXMessage({ + positions: SysTrayX.startupWindowPositions, + }); } // Lookout for storage changes @@ -393,6 +403,15 @@ SysTrayX.Link = { }); } + const positions = response["positions"]; + if (positions) { + console.debug("Positions" + JSON.stringify(positions)); + + browser.storage.sync.set({ + windowPositions: positions, + }); + } + if (response["preferences"]) { // Store the preferences from the app const defaultIconMime = response["preferences"].defaultIconMime; @@ -523,6 +542,16 @@ async function start() { SysTrayX.startupState = state; + // Restore window positions + const restorePositions = await getRestorePositionsState(); + + if (restorePositions == "true") { + SysTrayX.restorePositions = true; + + // Get the start window positions + SysTrayX.startupWindowPositions = await getStartupWindowPositions(); + } + // Get the close type SysTrayX.Messaging.closeType = await getCloseType(); browser.windowEvent.setCloseType(Number(SysTrayX.Messaging.closeType)); diff --git a/webext/js/defaults.js b/webext/js/defaults.js index 01bad9e..d94b998 100644 --- a/webext/js/defaults.js +++ b/webext/js/defaults.js @@ -113,7 +113,7 @@ async function getIcon() { // Get window startup state // async function getStartupState() { - function getStartupState(result) { + function getStartupStateCb(result) { const startMinimized = result.startMinimized || "false"; return startMinimized === "true" ? "minimized" : "normal"; } @@ -123,7 +123,47 @@ async function getStartupState() { } const getState = browser.storage.sync.get("startMinimized"); - return await getState.then(getStartupState, onStartupStateError); + return await getState.then(getStartupStateCb, onStartupStateError); +} + +// +// Get window restore position state +// +async function getRestorePositionsState() { + function getRestorePositionsStateCb(result) { + const restorePositions = result.restorePositions || "false"; + return restorePositions; + } + + function onRestorePositionsStateError() { + return "false"; + } + + const getState = browser.storage.sync.get("restorePositions"); + return await getState.then( + getRestorePositionsStateCb, + onRestorePositionsStateError + ); +} + +// +// Get window startup window positions +// +async function getStartupWindowPositions() { + function getStartupWindowPositionsCb(result) { + const windowPositions = result.windowPositions || []; + return windowPositions; + } + + function onStartupWindowPositionsError() { + return []; + } + + const getWindowPositions = browser.storage.sync.get("windowPositions"); + return await getWindowPositions.then( + getStartupWindowPositionsCb, + onStartupWindowPositionsError + ); } // diff --git a/webext/options.html b/webext/options.html index d465123..b5a5665 100644 --- a/webext/options.html +++ b/webext/options.html @@ -101,6 +101,17 @@ >__MSG_windows_start_min__ +
+ + +
diff --git a/webext/options.js b/webext/options.js index 28f2143..61e4b1d 100644 --- a/webext/options.js +++ b/webext/options.js @@ -86,6 +86,16 @@ SysTrayX.SaveOptions = { startMinimized: `${startMinimized}`, }); + // + // Save restore window positions state + // + const restorePositions = document.querySelector( + 'input[name="restorePositions"]' + ).checked; + browser.storage.sync.set({ + restorePositions: `${restorePositions}`, + }); + // // Save default icon preferences // @@ -197,10 +207,7 @@ SysTrayX.RestoreOptions = { // // Restore minimize type // - const getMinimizeType = browser.storage.sync.get([ - "platformInfo", - "minimizeType", - ]); + const getMinimizeType = browser.storage.sync.get("minimizeType"); getMinimizeType.then( SysTrayX.RestoreOptions.setMinimizeType, SysTrayX.RestoreOptions.onMinimizeTypeError @@ -224,6 +231,18 @@ SysTrayX.RestoreOptions = { SysTrayX.RestoreOptions.onStartMinimizedError ); + // + // Restore restore position state + // + const getRestorePositions = browser.storage.sync.get([ + "platformInfo", + "restorePositions", + ]); + getRestorePositions.then( + SysTrayX.RestoreOptions.setRestorePositions, + SysTrayX.RestoreOptions.onRestorePositionsError + ); + // // Restore default icon type // @@ -339,7 +358,7 @@ SysTrayX.RestoreOptions = { // Restore minimize type callbacks // setMinimizeType: function (result) { - const platformInfo = result.platformInfo || { os: "linux" }; + // const platformInfo = result.platformInfo || { os: "linux" }; const minimizeType = result.minimizeType || "1"; // Tweak option for platform @@ -382,7 +401,7 @@ SysTrayX.RestoreOptions = { }, // - // Restore hide on minimize callbacks + // Restore start minimized callbacks // setStartMinimized: function (result) { const startMinimized = result.startMinimized || "false"; @@ -395,6 +414,31 @@ SysTrayX.RestoreOptions = { console.log(`startMinimized Error: ${error}`); }, + // + // Restore restore position state callbacks + // + setRestorePositions: function (result) { + const platformInfo = result.platformInfo || { os: "linux" }; + const restorePositions = result.restorePositions || "false"; + + // Tweak option for platform + if (platformInfo.os === "win") { + document + .getElementById("restorePos") + .setAttribute("style", "display:none;"); + document + .getElementById("restorePositionsLabel") + .setAttribute("style", "display:none;"); + } + + const checkbox = document.querySelector(`input[name="restorePositions"]`); + checkbox.checked = restorePositions === "true"; + }, + + onRestorePositionsError: function (error) { + console.log(`RestorePositions Error: ${error}`); + }, + // // Restore icon type callbacks // @@ -767,6 +811,11 @@ SysTrayX.StorageChanged = { debug: changes[item].newValue, }); } + if (item === "restorePositions") { + SysTrayX.RestoreOptions.setRestorePositions({ + restorePositions: changes[item].newValue, + }); + } } if (changed_icon) {