Package: release.debian.org Severity: normal User: release.debian....@packages.debian.org Usertags: unblock
Please unblock package tomboy-ng v0.36a [ Reason ] Poor testing on my part lead to the use of bad colors for dark themes with version 0.36 currently in Bookworm. This relates to tomboy-ng's recent move to using Qt5 instead of gtk2 and, perhaps, my own person preference to not use dark themes. V0.36a is now uploaded and my sponsor requested I apply for an unblock. [ Impact ] As several users of the version currently in Testing have advised me, with some dark themes, the existing version might display some text with the same color as the background. Not good. [ Tests ] I have personally tested the proposed new version, 0.36a extensively. Similarly, some testing by end users has also taken place. [ Risks ] All changes relate to text colors. No other application logic has changed. As no package depends on tomboy-ng, effects beyond tomboy-ng approach zero. In every case identified, the 0.36a delivers the same or better user experience. [ Checklist ] [x] all changes are documented in the d/changelog [x] I initiated and reviewed all changes and I approve them [x] attach debdiff against the package in testing [ Other info ] Attached is a debdiff between 0.36 and 0.36a, quite a lot of its content relates to the Lazarus IDE's making inconsequential of changes to po and form files. Of significance is changes to man pages (better description of how to manage it's Qt5 colors) and editbox.pas where the means of determining appropriate colors has been changed. Changes to settings.pas to inform user of non-standard colors and save preferences. Some related minor change to loadnote.pas and mainform.pas Thanks for your consideration, David Bannon unblock tomboy-ng 0.36a
diff -Nru tomboy-ng-0.36/debian/changelog tomboy-ng-0.36a/debian/changelog --- tomboy-ng-0.36/debian/changelog 2023-02-22 20:45:26.000000000 +1100 +++ tomboy-ng-0.36a/debian/changelog 2023-03-19 10:08:23.000000000 +1100 @@ -1,19 +1,12 @@ -tomboy-ng (0.36-1) unstable; urgency=medium +tomboy-ng (0.36a-1) unstable; urgency=medium - * Release of new version - * From 0.35 to 0.36 - - * New Feature export as PDF. - * New Feature insert a symbol or accented character. - * Bug fix in column mode of calculator. - * Warn user about setting non mono font. - * All Tomdroid functionality removed. - * A fix for SWYT not finding some text in a brand new note. - * Can set colour of a link, more suitable default. - * Use of TextHint to better indicate EditSearch role. - * Revised note button colors for better dark theme use. - * Please see github for further change details + * Release of new version. + * More uniform colors when used with qt5ct. + * Man page added info re colors. + * Indicator that custom colors being used. + * Please see github for further change details. - -- David Bannon <tomboy...@bannons.id.au> Wed, 22 Feb 2023 20:45:26 +1100 + -- David Bannon <tomboy...@bannons.id.au> Sun, 19 Mar 2023 10:08:23 +1100 tomboy-ng (0.35-2) unstable; urgency=medium diff -Nru tomboy-ng-0.36/doc/tomboy-ng.1 tomboy-ng-0.36a/doc/tomboy-ng.1 --- tomboy-ng-0.36/doc/tomboy-ng.1 2023-02-22 20:42:59.000000000 +1100 +++ tomboy-ng-0.36a/doc/tomboy-ng.1 2023-03-19 10:01:36.000000000 +1100 @@ -11,7 +11,7 @@ tomboy\-ng \- manage a collection of notes using a simple GUI markup .SH SYNOPSIS -tomboy\-ng [\-h \-\-help] [\-\-debug\-sync] [\-\-debug\-index] [\-\-debug\-log=LOGFILE] [\-l \-\-lang=CC] [\-\-config\-dir=PATH_to_DIR] [\-o PATH_to_NOTE] [\-\-open\-note=PATH_to_NOTE] [PATH_to_NOTE] [\-t \-\-import\-txt=PATH_to_FILE] [\-m \-\-import\-md=PATH_to_FILE] [\-n \-\-import\-note=PATH_to_NOTE] [\-\-title\-fname] +tomboy\-ng [\-h \-\-help] [\-\-dark\-theme] [\-\-debug\-sync] [\-\-debug\-index] [\-\-debug\-log=LOGFILE] [\-l \-\-lang=CC] [\-\-config\-dir=PATH_to_DIR] [\-o PATH_to_NOTE] [\-\-open\-note=PATH_to_NOTE] [PATH_to_NOTE] [\-t \-\-import\-txt=PATH_to_FILE] [\-m \-\-import\-md=PATH_to_FILE] [\-n \-\-import\-note=PATH_to_NOTE] [\-\-title\-fname] .SH DESCRIPTION tomboy\-ng is a rewrite of the much loved Tomboy Notes. It runs on Linux, Windows and MacOS. It is file compatible with Tomdroid and GNote (>=v0.30). Tomboy\-ng notes support Bold, Italic, Strikethrough, Highlight and Underline in four sizes. It will sync notes with other systems using Tomboy's File Sync model and to remote servers using sshfs. It will Sync with a Github account, either all your notes or just ones in the SyncGithub notebook. You can edit notes, from almost any device with a browser in markdown format. @@ -24,6 +24,20 @@ While options below are familiar to Linux users, Mac and Windows users may like to look at some examples further down to see how to use them. +.SH DARK THEME +The GTK2 version follows the system colour theme. However, the Qt5 version (eg Bookworm and later) requires some instruction from the user. Using the \-\-dark\-theme is simplest and probably the least satisfactory approach, the note edit screen is a dark theme, other windows vary. A better Qt5 approach is to set an environment variable that instructs the app to follow the existing (generally gtk2) theme. You may need to install qt5\-style\-plugins package. Either add the variable ahead of the tomboy\-ng command line like this \- + +QT_QPA_PLATFORMTHEME=gtk2 tomboy\-ng + +or, a more general solution, applying to all Qt5 apps, add that var to either /etc/environment (requires root or, simpler in a .xsessionrc file in your home dir. + +cd ; echo "export QT_QPA_PLATFORMTHEME=gtk2" >> .xsessionrc + +Probably need to log out and back in again. A more comprehensive approach is to install the qt5ct package and give your Qt5 applications the same environment variable as above but set to qt5ct (instead of gtk2). This will allow you to choose one of the qt5ct colour themes or alter a copy with colours of your choice. The qt5ct command has a nice GUI. + +On Windows, tomboy\-ng will follow the system for Dark Theme but only for the note edit window. Using the \-\-dark\-theme switch is not recommended. + +On MacOS, tomboy\-ng is believed to follow the system theme. .SH OPTIONS .TP @@ -35,6 +49,10 @@ Print the tomboy\-ng version and exit. .TP +\-\-dark\-theme +Makes the note edit windows a reasonable dark theme (but you the system theme). Other part of the app are not dark. This option may be removed in future releases. + +.TP \-\-no\-splash Do not show the small tomboy\-ng splash screen at startup. However, if an error is detected the splash screen is always shown. diff -Nru tomboy-ng-0.36/package/version tomboy-ng-0.36a/package/version --- tomboy-ng-0.36/package/version 2023-02-22 20:42:59.000000000 +1100 +++ tomboy-ng-0.36a/package/version 2023-03-19 10:01:36.000000000 +1100 @@ -1 +1 @@ -0.36 +0.36a diff -Nru tomboy-ng-0.36/po/tomboy-ng.es.po tomboy-ng-0.36a/po/tomboy-ng.es.po --- tomboy-ng-0.36/po/tomboy-ng.es.po 2023-02-22 20:42:59.000000000 +1100 +++ tomboy-ng-0.36a/po/tomboy-ng.es.po 2023-03-19 10:01:36.000000000 +1100 @@ -5,7 +5,7 @@ msgstr "" "Project-Id-Version: tomboy-ng v0.35\n" "POT-Creation-Date: \n" -"PO-Revision-Date: 2022-11-13 10:56+0100\n" +"PO-Revision-Date: 2023-03-16 16:59+0100\n" "Last-Translator: RWR\n" "Language-Team: \n" "Language: es\n" @@ -13,29 +13,29 @@ "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -"X-Generator: Poedit 3.2\n" +"X-Generator: Poedit 3.2.2\n" #: editbox.rsunabletoevaluate msgid "Unable to find an expression to evaluate" -msgstr "No encontró ninguna expresión para calcular" +msgstr "No encuentra ninguna expresión para calcular" #: fpttf.rsmissingfontfile #, object-pascal-format msgid "The font file <%s> can't be found." -msgstr "" +msgstr "No encuentra el archivo del fuente <%s>" #: fpttf.rsnofontfilename msgid "The FileName property is empty, so we can't load font data." -msgstr "" +msgstr "No podemos cargar la fuente porque la propiedad FileName es vacía." #: fpttf.rsnosearchpathdefined msgid "No search path was defined" -msgstr "" +msgstr "Falta la ruta de búsqueda" #: fpttf.serrfontnotfound #, object-pascal-format msgid "The font <%s> can't be found" -msgstr "" +msgstr "No encuentra la fuente <%s>" #: mainunit.rsabout msgid "tomboy-ng notes - cross platform, sync and manage notes." @@ -59,7 +59,7 @@ #: mainunit.rsfailedtoindex msgid "Failed to index one or more notes." -msgstr "tomboy-ng no pudo indizar una nota o más." +msgstr "Fallo en indizar una nota o más." #: resourcestr.rsaddnotestonotebook msgid "Add notes to this Notebook" @@ -170,7 +170,7 @@ #: resourcestr.rsenterhexvalue msgctxt "resourcestr.rsenterhexvalue" msgid "Enter the Hexadecimal value for a UTF8 character" -msgstr "" +msgstr "Escribe el valor hexidecimal para el carácter UTF8" #: resourcestr.rsenternewnotebook msgctxt "resourcestr.rsenternewnotebook" @@ -251,7 +251,7 @@ #: resourcestr.rshelpdelay msgctxt "resourcestr.rshelpdelay" msgid "Delay startup 2 sec to allow OS to settle" -msgstr "Retrasar arranque 2 segs para dejar asentarse el SO" +msgstr "Retrasar el arranque 2 segs para dejar asentarse el SO" #: resourcestr.rshelphelp msgctxt "resourcestr.rshelphelp" @@ -293,7 +293,7 @@ #: resourcestr.rshexcharrequired msgid "2, 4, 6 or 8 Hex Characters Required" -msgstr "" +msgstr "Hacen falta 2, 4, 6 o 8 carácteres hexadecimal" #: resourcestr.rslastchange msgctxt "resourcestr.rslastchange" @@ -435,7 +435,7 @@ #: resourcestr.rsrecoverok msgctxt "resourcestr.rsrecoverok" msgid "OK, File recovered." -msgstr "Archivo recuperado." +msgstr "OK, archivo recuperado." #: resourcestr.rsrenamefailed msgctxt "resourcestr.rsrenamefailed" @@ -488,7 +488,7 @@ #: resourcestr.rssnapshotcreated msgctxt "resourcestr.rssnapshotcreated" msgid "created, do you want to copy it elsewhere ?" -msgstr "creada. ¿Quiere copiarla en otro sitio?" +msgstr "creada. ¿Quiere copiarla a otro sitio?" #: resourcestr.rssyncerror msgctxt "resourcestr.rssyncerror" @@ -544,7 +544,7 @@ #: resourcestr.rsutf8charlist msgid "Click here to browse to full list" -msgstr "" +msgstr "Haga clic aquí para ver la lista completa" #: resourcestr.rswarnnossystray msgid "WARNING, your Desktop might not display SysTray" @@ -629,10 +629,10 @@ msgid "Downloads " msgstr "Descargas" -# ¿Editar las notas, la lista, cual? +# ¿Revisar las notas, la lista, cual? #: syncutils.rsedituploads msgid "Edit Uploads " -msgstr "Notas cambiadas a subir" +msgstr "Revisar notas subidas" #: syncutils.rslocaldeletes msgid "Local Deletes " @@ -660,7 +660,7 @@ # ¿Y el sujeto? #: syncutils.rsnotrecommend msgid "Generally not recommended." -msgstr "En general, poco aconsejable" +msgstr "En general, no aconsejable" #: syncutils.rsremotedeletes msgid "Remote Deletes " @@ -675,9 +675,10 @@ msgid "Menu" msgstr "Menú" +# ¿Texto a traducir o un variabe? #: teditboxform.editfind.text msgid "EditFind" -msgstr "Término" +msgstr "RevisarBuscar" #: teditboxform.label2.caption msgid "Read Only" @@ -762,7 +763,7 @@ #: teditboxform.menuitemexportpdf.caption msgid "Export PDF" -msgstr "" +msgstr "Exportar PDF" #: teditboxform.menuitemexportplaintext.caption msgid "Export Plain Text" @@ -859,7 +860,7 @@ #: teditboxform.speedrollback.hint msgid "Roll Back" -msgstr "Volver a la anterior" +msgstr "Restaurar" #: tformbackupview.buttondelete.caption msgctxt "tformbackupview.buttondelete.caption" @@ -922,9 +923,10 @@ msgid "Cancel" msgstr "Cancelar" +# Colores "por defecto", pero poco espacio en el botón #: tformcolours.speeddefault.caption msgid "Default" -msgstr "Defecto" +msgstr "Predets." #: tformcolours.speedhighlight.caption msgctxt "tformcolours.speedhighlight.caption" @@ -933,7 +935,7 @@ #: tformcolours.speedlinks.caption msgid "Links" -msgstr "" +msgstr "Enlaces" #: tformcolours.speedok.caption msgctxt "tformcolours.speedok.caption" @@ -959,7 +961,7 @@ #: tformkmemo2pdf.caption msgid "PDF Issues" -msgstr "" +msgstr "Problemas de PDF" #: tformrecover.buttondeletebadnotes.caption msgid "Delete Bad Notes" @@ -1083,9 +1085,10 @@ msgid "Local" msgstr "Local" +# ¿Demasiado largo? #: tformsdiff.buttallnewest.caption msgid "Newest" -msgstr "Más reciente" +msgstr "La más reciente" #: tformsdiff.buttalloldest.caption msgid "Oldest" @@ -1162,20 +1165,18 @@ #: tformsymbol.bitbtnrevert.caption msgid "Revert" -msgstr "" +msgstr "Deshacer" #: tformsymbol.caption msgid "Symbol" -msgstr "" +msgstr "Símbolo" #: tformsymbol.stringgrid1.columns[0].title.caption -#, fuzzy msgctxt "tformsymbol.stringgrid1.columns[0].title.caption" msgid "Title" msgstr "Título" #: tformsymbol.stringgrid1.columns[1].title.caption -#, fuzzy msgctxt "tformsymbol.stringgrid1.columns[1].title.caption" msgid "Title" msgstr "Título" @@ -1208,9 +1209,10 @@ msgid "Title" msgstr "Título" +# ¿Demasiado largo? #: tformsync.listviewreport.columns[2].caption msgid "Note ID" -msgstr "ID nota" +msgstr "ID de la nota" #: tmainform.bitbtnhide.caption msgid "Hide" @@ -1232,15 +1234,16 @@ #: tmainform.caption msgid "tomboy-ng" -msgstr "Bienvenida a tomboy-ng" +msgstr "tomboy-ng" #: tmainform.checkboxdontshow.caption msgid "Don't Show for normal startup" msgstr "No mostrar al inicio" +# Creo #: tmainform.checkboxdontshow.hint msgid "You can reverse this from Settings" -msgstr "You can reverse this from Settings" +msgstr "Puede invertirlo desde las Preferencias" #: tmainform.hint msgid "If the yellow tomboy-ng icon is visible in your System Tray, you can dismiss this window." @@ -1714,4 +1717,3 @@ msgctxt "tsett.tabsync.caption" msgid "Sync" msgstr "Sync" - diff -Nru tomboy-ng-0.36/po/tomboy-ng.fr.po tomboy-ng-0.36a/po/tomboy-ng.fr.po --- tomboy-ng-0.36/po/tomboy-ng.fr.po 2023-02-22 20:42:59.000000000 +1100 +++ tomboy-ng-0.36a/po/tomboy-ng.fr.po 2023-03-19 10:01:36.000000000 +1100 @@ -1320,6 +1320,12 @@ msgid "Set Notes" msgstr "Définir Notes" +#: tsearchform.bitbtnmenu.caption +#, fuzzy +msgctxt "tsearchform.bitbtnmenu.caption" +msgid "Menu" +msgstr "Menu" + #: tsearchform.buttonclearfilters.caption #, fuzzy #| msgid "Clear Filters" @@ -1327,10 +1333,17 @@ msgid "Clear" msgstr "Effacer les filtres" -#: tsearchform.buttonmenu.caption -msgctxt "tsearchform.buttonmenu.caption" -msgid "Menu" -msgstr "Menu" +#: tsearchform.buttonclearsearch.caption +#, fuzzy +msgctxt "tsearchform.buttonclearsearch.caption" +msgid "Clear" +msgstr "Effacer" + +#: tsearchform.buttonsearchoptions.caption +#, fuzzy +msgctxt "tsearchform.buttonsearchoptions.caption" +msgid "Options" +msgstr "Options" #: tsearchform.caption msgid "tomboy-ng_Search" @@ -1384,19 +1397,6 @@ msgid "Notebooks" msgstr "Carnets" -#: tsearchform.speedbuttonclearsearch.caption -msgctxt "tsearchform.speedbuttonclearsearch.caption" -msgid "Clear" -msgstr "Effacer" - -#: tsearchform.speedsearchotions.caption -msgid "Options" -msgstr "Options" - -#: tsearchform.speedsearchotions.hint -msgid "Search Options" -msgstr "Options de recherche" - #: tsett.buttdefaultnotedir.caption msgid "Use Default Notes Location" msgstr "Emplacement par défaut" diff -Nru tomboy-ng-0.36/po/tomboy-ng.nl.po tomboy-ng-0.36a/po/tomboy-ng.nl.po --- tomboy-ng-0.36/po/tomboy-ng.nl.po 2023-02-22 20:42:59.000000000 +1100 +++ tomboy-ng-0.36a/po/tomboy-ng.nl.po 2023-03-19 10:01:36.000000000 +1100 @@ -1298,15 +1298,28 @@ msgid "Set Notes" msgstr "Notities instellen" +#: tsearchform.bitbtnmenu.caption +#, fuzzy +msgctxt "tsearchform.bitbtnmenu.caption" +msgid "Menu" +msgstr "Menu" + #: tsearchform.buttonclearfilters.caption msgctxt "tsearchform.buttonclearfilters.caption" msgid "Clear" msgstr "Wissen" -#: tsearchform.buttonmenu.caption -msgctxt "tsearchform.buttonmenu.caption" -msgid "Menu" -msgstr "Menu" +#: tsearchform.buttonclearsearch.caption +#, fuzzy +msgctxt "tsearchform.buttonclearsearch.caption" +msgid "Clear" +msgstr "Wissen" + +#: tsearchform.buttonsearchoptions.caption +#, fuzzy +msgctxt "tsearchform.buttonsearchoptions.caption" +msgid "Options" +msgstr "Opties" #: tsearchform.caption msgid "tomboy-ng_Search" @@ -1358,19 +1371,6 @@ msgid "Notebooks" msgstr "Notitieboeken" -#: tsearchform.speedbuttonclearsearch.caption -msgctxt "tsearchform.speedbuttonclearsearch.caption" -msgid "Clear" -msgstr "Wissen" - -#: tsearchform.speedsearchotions.caption -msgid "Options" -msgstr "Opties" - -#: tsearchform.speedsearchotions.hint -msgid "Search Options" -msgstr "Zoekopties" - #: tsett.buttdefaultnotedir.caption msgid "Use Default Notes Location" msgstr "Standaard notitielocatie gebruiken" diff -Nru tomboy-ng-0.36/po/tomboy-ng.pot tomboy-ng-0.36a/po/tomboy-ng.pot --- tomboy-ng-0.36/po/tomboy-ng.pot 2023-02-22 20:42:59.000000000 +1100 +++ tomboy-ng-0.36a/po/tomboy-ng.pot 2023-03-19 10:01:36.000000000 +1100 @@ -1280,14 +1280,24 @@ msgid "Set Notes" msgstr "" +#: tsearchform.bitbtnmenu.caption +msgctxt "tsearchform.bitbtnmenu.caption" +msgid "Menu" +msgstr "" + #: tsearchform.buttonclearfilters.caption msgctxt "tsearchform.buttonclearfilters.caption" msgid "Clear" msgstr "" -#: tsearchform.buttonmenu.caption -msgctxt "tsearchform.buttonmenu.caption" -msgid "Menu" +#: tsearchform.buttonclearsearch.caption +msgctxt "tsearchform.buttonclearsearch.caption" +msgid "Clear" +msgstr "" + +#: tsearchform.buttonsearchoptions.caption +msgctxt "tsearchform.buttonsearchoptions.caption" +msgid "Options" msgstr "" #: tsearchform.caption @@ -1340,19 +1350,6 @@ msgid "Notebooks" msgstr "" -#: tsearchform.speedbuttonclearsearch.caption -msgctxt "tsearchform.speedbuttonclearsearch.caption" -msgid "Clear" -msgstr "" - -#: tsearchform.speedsearchotions.caption -msgid "Options" -msgstr "" - -#: tsearchform.speedsearchotions.hint -msgid "Search Options" -msgstr "" - #: tsett.buttdefaultnotedir.caption msgid "Use Default Notes Location" msgstr "" diff -Nru tomboy-ng-0.36/po/tomboy-ng.uk.po tomboy-ng-0.36a/po/tomboy-ng.uk.po --- tomboy-ng-0.36/po/tomboy-ng.uk.po 2023-02-22 20:42:59.000000000 +1100 +++ tomboy-ng-0.36a/po/tomboy-ng.uk.po 2023-03-19 10:01:36.000000000 +1100 @@ -1297,15 +1297,28 @@ msgid "Set Notes" msgstr "Вказати нотатки" +#: tsearchform.bitbtnmenu.caption +#, fuzzy +msgctxt "tsearchform.bitbtnmenu.caption" +msgid "Menu" +msgstr "Меню" + #: tsearchform.buttonclearfilters.caption msgctxt "tsearchform.buttonclearfilters.caption" msgid "Clear" msgstr "Очистити" -#: tsearchform.buttonmenu.caption -msgctxt "tsearchform.buttonmenu.caption" -msgid "Menu" -msgstr "Меню" +#: tsearchform.buttonclearsearch.caption +#, fuzzy +msgctxt "tsearchform.buttonclearsearch.caption" +msgid "Clear" +msgstr "Очистити" + +#: tsearchform.buttonsearchoptions.caption +#, fuzzy +msgctxt "tsearchform.buttonsearchoptions.caption" +msgid "Options" +msgstr "Параметри" #: tsearchform.caption msgid "tomboy-ng_Search" @@ -1357,19 +1370,6 @@ msgid "Notebooks" msgstr "Записники" -#: tsearchform.speedbuttonclearsearch.caption -msgctxt "tsearchform.speedbuttonclearsearch.caption" -msgid "Clear" -msgstr "Очистити" - -#: tsearchform.speedsearchotions.caption -msgid "Options" -msgstr "Параметри" - -#: tsearchform.speedsearchotions.hint -msgid "Search Options" -msgstr "Параметри пошуку" - #: tsett.buttdefaultnotedir.caption msgid "Use Default Notes Location" msgstr "Викор. типове розташування нотаток" diff -Nru tomboy-ng-0.36/prepare.md tomboy-ng-0.36a/prepare.md --- tomboy-ng-0.36/prepare.md 2023-02-22 20:42:59.000000000 +1100 +++ tomboy-ng-0.36a/prepare.md 2023-03-19 10:01:36.000000000 +1100 @@ -58,6 +58,9 @@ cd ../"Build""$DebVer" dput mentors *.changes +Find it at - + https://mentors.debian.net/package/tomboy-ng/ + If you don't get a response, did you include 'mentors' in the dput line ? ***REMEMBER to feed changlog back to github tree !*** diff -Nru tomboy-ng-0.36/scripts/prepare.debian tomboy-ng-0.36a/scripts/prepare.debian --- tomboy-ng-0.36/scripts/prepare.debian 2023-02-22 20:42:59.000000000 +1100 +++ tomboy-ng-0.36a/scripts/prepare.debian 2023-03-19 10:01:36.000000000 +1100 @@ -376,14 +376,14 @@ cd "$APP"_"$VER""$DEBVER" - dch -v "$VER""$DEBVER" -D"$DISTRO1" "$DISTRO2" "Release of new version" + dch -v "$VER""$DEBVER" -D"$DISTRO1" "$DISTRO2" "Release of new version." if [ -f whatsnew ]; then echo "---------- Including whatsnew in changelog" while IFS= read -r Line; do dch --append "$Line" done < whatsnew fi - dch --append "Please see github for further change details" + dch --append "Please see github for further change details." #cp debian/control.debian debian/control # thats the GTK2 version #if [ "$WIDGET" = "Qt5" ]; then diff -Nru tomboy-ng-0.36/source/cli.pas tomboy-ng-0.36a/source/cli.pas --- tomboy-ng-0.36/source/cli.pas 2023-02-22 20:42:59.000000000 +1100 +++ tomboy-ng-0.36a/source/cli.pas 2023-03-19 10:01:36.000000000 +1100 @@ -81,7 +81,7 @@ debugln(rsMachelp1); debugln(rsMacHelp2); {$endif} - debugln(' --dark-theme'); + debugln(' --dark-theme ' + 'Does not work for GTK2'); debugln(' -l --lang=CCode ' + rsHelpLang); // syntax depends on bugfix https://bugs.freepascal.org/view.php?id=35432 debugln(' -h --help ' + rsHelpHelp); debugln(' --version ' + rsHelpVersion); diff -Nru tomboy-ng-0.36/source/editbox.lfm tomboy-ng-0.36a/source/editbox.lfm --- tomboy-ng-0.36/source/editbox.lfm 2023-02-22 20:42:59.000000000 +1100 +++ tomboy-ng-0.36a/source/editbox.lfm 2023-03-19 10:01:36.000000000 +1100 @@ -14,7 +14,7 @@ OnCreate = FormCreate OnDestroy = FormDestroy OnShow = FormShow - LCLVersion = '2.3.0.0' + LCLVersion = '2.2.0.2' object PanelReadOnly: TPanel AnchorSideLeft.Control = Owner AnchorSideTop.Control = KMemo1 diff -Nru tomboy-ng-0.36/source/editbox.pas tomboy-ng-0.36a/source/editbox.pas --- tomboy-ng-0.36/source/editbox.pas 2023-02-22 20:42:59.000000000 +1100 +++ tomboy-ng-0.36a/source/editbox.pas 2023-03-19 10:01:36.000000000 +1100 @@ -235,6 +235,9 @@ we can be sure the note has been added to NoteLister first. 2023/02/12 Set the default font name from Sett in OnShow(), issue #263 2023/02/14 Fixed bug in column calculater, was ignoring negitive terms. + 2023/03/11 Allow Qt to set Text and Background colour, force Gray for Inactive + background (in LoadNote) cos Kmemo get it wrong + } @@ -465,6 +468,7 @@ // The thread keeps going after the method returns doing above and then // free-ing the List. function SaveStringList(const SL: TStringList; Loc: TNoteUpdateRec): boolean; + procedure SetTheColors; function SimpleCalculate(out AStr: string): boolean; procedure ClearLinks(const StartScan : longint =0; EndScan : longint = 0); { Looks around current block looking for link blocks. If invalid, 'unlinks' them. @@ -1967,6 +1971,27 @@ - Existing Note from eg Tray Menu, Searchbox yes yes no R1 ImportNote() } + + +procedure TEditBoxForm.SetTheColors; +begin + KMemo1.Blocks.LockUpdate; + {$ifdef windows} + // Color:= Sett.textcolour; + if Sett.DarkTheme then Color := Sett.BackGndColour; + {$endif} + PanelFind.Color := Sett.AltColour; + Panel1.Color := Sett.AltColour; + KMemo1.Colors.SelTextFocused := Sett.TextColour; + KMemo1.Colors.SelText := Sett.TextColour; // when looses focus + KMemo1.Colors.BkGnd:= Sett.BackGndColour; + KMemo1.Colors.SelBkGnd := Sett.AltBackGndColor; // Selected backgnd when looses focus + KMemo1.Colors.SelBkGndFocused := Sett.AltBackGndColor; // Selected backgnd with focus + Kmemo1.Blocks.DefaultTextStyle.Font.Color := Sett.TextColour; + Kmemo1.Blocks.DefaultTextStyle.Brush.Color := Sett.BackGndColour; + KMemo1.Blocks.UnLockUpdate; +end; + procedure TEditBoxForm.FormShow(Sender: TObject); var ItsANewNote : boolean = false; @@ -1977,6 +2002,7 @@ TimerSave.Enabled := False; KMemo1.Font.Size := Sett.FontNormal; KMemo1.Font.Name := Sett.UsualFont; +// KMemo1.Colors.SelBkGnd := Sett.BackGndColour; {$ifdef LCLGTK2} KMemo1.ExecuteCommand(ecPaste); // this to deal with a "first copy" issue on Linux. // above line generates a gtk2 assertion but only in single note mode. I suspect @@ -1985,6 +2011,9 @@ // as we select some text so may as well get it over with. No need to do it in Qt5, Win, Mac {$endif} Kmemo1.Clear; +// SetTheColors; + + if SingleNoteMode then ItsANewNote := LoadSingleNote() // Might not be Tomboy XML format else @@ -2022,17 +2051,7 @@ KMemo1.executecommand(ecEditorTop); KMemo1.ExecuteCommand(ecDown); end; - KMemo1.Blocks.LockUpdate; - {$ifdef windows} - // Color:= Sett.textcolour; - if Sett.DarkTheme then Color := Sett.BackGndColour; - {$endif} - PanelFind.Color := Sett.AltColour; - Panel1.Color := Sett.AltColour; - KMemo1.Colors.BkGnd:= Sett.BackGndColour; - Kmemo1.Blocks.DefaultTextStyle.Font.Color := Sett.TextColour; - Kmemo1.Blocks.DefaultTextStyle.Brush.Color := Sett.BackGndColour; - KMemo1.Blocks.UnLockUpdate; + SetTheColors; Ready := true; Dirty := False; end; diff -Nru tomboy-ng-0.36/source/kmemo2pdf.lfm tomboy-ng-0.36a/source/kmemo2pdf.lfm --- tomboy-ng-0.36/source/kmemo2pdf.lfm 2023-02-22 20:42:59.000000000 +1100 +++ tomboy-ng-0.36a/source/kmemo2pdf.lfm 2023-03-19 10:01:36.000000000 +1100 @@ -1,7 +1,7 @@ object FormKMemo2pdf: TFormKMemo2pdf - Left = 143 + Left = 80 Height = 461 - Top = 213 + Top = 570 Width = 571 ActiveControl = Memo1 Caption = 'PDF Issues' @@ -9,7 +9,7 @@ ClientWidth = 571 OnCreate = FormCreate OnShow = FormShow - LCLVersion = '2.3.0.0' + LCLVersion = '2.2.0.2' object BitBtn1: TBitBtn AnchorSideRight.Control = Owner AnchorSideRight.Side = asrBottom diff -Nru tomboy-ng-0.36/source/loadnote.pas tomboy-ng-0.36a/source/loadnote.pas --- tomboy-ng-0.36/source/loadnote.pas 2023-02-22 20:42:59.000000000 +1100 +++ tomboy-ng-0.36a/source/loadnote.pas 2023-03-19 10:01:36.000000000 +1100 @@ -1,5 +1,5 @@ unit LoadNote; -{ Copyright (C) 2017-2022 David Bannon +{ Copyright (C) 2017-2023 David Bannon License: This code is licensed under BSD 3-Clause Clear License, see file License.txt @@ -7,7 +7,7 @@ ------------------ - This unit is responsible for loading a note into the passed Richmemo. The + This unit is responsible for loading a note into the passed Kmemo. The note is expected to be in Tomboy's XML format. Note that the class expects a few things to be passed to it, after creation that it will need before you call LoadNote(). @@ -35,6 +35,7 @@ 2021/08/27 Extensive changes to support multilevel bullets, use Tomboy or Conboy model 2022/10/31 Force default background colour while loading, it shows up ok without doing it here but blocks do not always report the correct color when asked. + 2023/03/11 Allow Qt to set Text and Background colour, force Gray for Inactive Background cos Kmemo get it wrong } {$mode objfpc}{$H+} @@ -42,7 +43,7 @@ interface uses - Classes, SysUtils, KMemo; + Classes, SysUtils, KMemo, Graphics; type @@ -103,7 +104,7 @@ implementation -uses Graphics, // For some font style defs +uses // For some font style defs LazUTF8, Settings, // User settings and some defines across units. TB_Utils, @@ -168,7 +169,7 @@ FT.Size:= FontSize; end; TB := KM.Blocks.AddTextBlock(RestoreBadXMLChar(InStr)); - TB.TextStyle.Brush.Color := Sett.BackGndColour; + TB.TextStyle.Brush.Color := Sett.BackGndColour; //LocalBackGndColour; if Bold then FT.Style := FT.Style + [fsBold]; if Italic then FT.Style := FT.Style + [fsItalic]; if HighLight then TB.TextStyle.Brush.Color := Sett.HiColour; @@ -178,7 +179,7 @@ if FixedWidth then FT.Pitch := fpFixed; if not FixedWidth then FT.Name := Sett.UsualFont; // Because 'FixedWidth := false;' does not specify a font to return to // if Sett.DarkTheme then Ft.Color:=Sett.DarkTextColour; - Ft.Color:=Sett.TextColour; + Ft.Color := Sett.TextColour; TB.TextStyle.Font := Ft; FT.Free; end; diff -Nru tomboy-ng-0.36/source/mainunit.lfm tomboy-ng-0.36a/source/mainunit.lfm --- tomboy-ng-0.36/source/mainunit.lfm 2023-02-22 20:42:59.000000000 +1100 +++ tomboy-ng-0.36a/source/mainunit.lfm 2023-03-19 10:01:36.000000000 +1100 @@ -1,8 +1,8 @@ object MainForm: TMainForm - Left = 195 + Left = 452 Height = 294 Hint = 'If the yellow tomboy-ng icon is visible in your System Tray, you can dismiss this window.' - Top = 208 + Top = 303 Width = 565 Caption = 'tomboy-ng' ClientHeight = 294 @@ -13,7 +13,7 @@ OnKeyDown = FormKeyDown OnResize = FormResize OnShow = FormShow - LCLVersion = '2.3.0.0' + LCLVersion = '2.2.0.2' object ImageNotesDirTick: TImage AnchorSideTop.Control = LabelNotesFound Left = 24 diff -Nru tomboy-ng-0.36/source/mainunit.pas tomboy-ng-0.36a/source/mainunit.pas --- tomboy-ng-0.36/source/mainunit.pas 2023-02-22 20:42:59.000000000 +1100 +++ tomboy-ng-0.36a/source/mainunit.pas 2023-03-19 10:01:36.000000000 +1100 @@ -78,6 +78,7 @@ 2022/08/10 Added an about Lazarus to splash screen and simplified the About screen. 2022/10/20 To Avoid calling IndexNotes() from Import, now function, IndexNewNote() 2022/11/14 ShowNotifications() now cross platform. + 2023/03/17 Provide better support for dark theme, particularly for Qt5 in qt5ct mode CommandLine Switches @@ -182,6 +183,8 @@ procedure StartIPCServer(); procedure CommMessageReceived(Sender: TObject); + // Attempt to detect we are in a dark theme, sets relevent colours, if main form + // is dark, then rest of app will be too except for the KMemo. procedure TestDarkThemeInUse(); {$ifdef LINUX} function CheckGnomeExtras(): boolean; @@ -544,24 +547,32 @@ end; {$endif} // hides CheckForSystemTray() and CheckGnomeExtras() from non Linux + + procedure TMainForm.FormShow(Sender: TObject); var NoteID, NoteTitle : string; - {$ifndef LCLGTK2}Lab : TLabel; {$endif} +(* {$ifndef LCLGTK2} {$endif} *) Lab : TLabel; Butt : TBitBtn; begin TestDarkThemeInUse(); - {$ifndef LCLGTK2} // GTK2 seems only one we can be sure is auto colours ! +// {$ifndef LCLGTK2} // GTK2 seems only one we can be sure is auto colours ! // We honour --dark-theme for most and if we can guess its dark we'll // act accordingly. - color := Sett.AltColour; - font.color := Sett.TextColour; // These do not work for Windows, so for just bullseye, just temp.... - ButtMenu.Color := Sett.AltColour; - BitBtnQuit.Color := Sett.AltColour; - BitBtnHide.Color := Sett.AltColour; - for Lab in [Label5, LabelNotesFound, Label3, Label4, LabelBadNoteAdvice, LabelError] do - TLabel(Lab).Font.Color:= Sett.TextColour; - CheckBoxDontShow.Font.color := Sett.TextColour; - {$endif} + + if Sett.DarkThemeSwitch then begin // If Qt is doing its own colours, let it ! + color := Sett.AltColour; + font.color := Sett.TextColour; // These do not work for Windows ? + for Butt in [ButtMenu, BitBtnQuit, BitBtnHide, ButtSysTrayHelp] do + Butt.Color := Sett.AltColour; + //ButtMenu.Color := Sett.AltColour; + //BitBtnQuit.Color := Sett.AltColour; + //BitBtnHide.Color := Sett.AltColour; + // ButtSysTrayHelp.Color := Sett.AltColour; + for Lab in [Label5, LabelNotesFound, Label3, Label4, LabelBadNoteAdvice, LabelError] do + TLabel(Lab).Font.Color:= Sett.TextColour; + CheckBoxDontShow.Font.color := Sett.TextColour; + end; +// {$endif} if SingleNoteFileName() <> '' then begin // That reads the global in CLI Unit SingleNoteMode(SingleNoteFileName); exit; @@ -691,7 +702,7 @@ ButtSysTrayHelp.width := MN; end; - // Attempt to detect we are in a dark theme, sets relevent colours. + procedure TMainForm.TestDarkThemeInUse(); {$ifdef WINDOWS} function WinDarkTheme : boolean; // we also need to test in High Contrast mode, its not a colour theme. @@ -721,10 +732,11 @@ {$endif} begin - if Application.HasOption('dark-theme') then // Manual override always wins ! - Sett.DarkTheme := True + if Application.HasOption('dark-theme') then // Manual override always wins unless its GTK2 (GTK3 ?) ! + {$ifndef LCLGTK2} Sett.DarkThemeSwitch := True {$endif} else begin Sett.DarkTheme := false; + Sett.DarkThemeSwitch := false; {$ifdef WINDOWS} Sett.DarkTheme := WinDarkTheme(); {$else} @@ -733,7 +745,7 @@ Sett.DarkTheme := (Col[3] < 'A') and (Col[5] < 'A') and (Col[7] < 'A'); {$endif} end; - Sett.SetColours; + Sett.SetColours; end; { ------------- M E N U M E T H O D S ----------------} diff -Nru tomboy-ng-0.36/source/searchunit.lfm tomboy-ng-0.36a/source/searchunit.lfm --- tomboy-ng-0.36/source/searchunit.lfm 2023-02-22 20:42:59.000000000 +1100 +++ tomboy-ng-0.36a/source/searchunit.lfm 2023-03-19 10:01:36.000000000 +1100 @@ -16,17 +16,16 @@ OnKeyDown = FormKeyDown OnResize = FormResize OnShow = FormShow - LCLVersion = '2.3.0.0' + LCLVersion = '2.2.0.2' object EditSearch: TEdit - AnchorSideLeft.Control = ButtonMenu + AnchorSideLeft.Control = BitBtnMenu AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = Owner - AnchorSideBottom.Control = ButtonMenu AnchorSideBottom.Side = asrBottom - Left = 126 + Left = 142 Height = 32 Top = 0 - Width = 222 + Width = 148 Anchors = [akTop, akLeft, akBottom] BorderSpacing.Left = 2 OnChange = EditSearchChange @@ -39,7 +38,6 @@ end object Panel1: TPanel AnchorSideLeft.Control = Owner - AnchorSideTop.Control = ButtonMenu AnchorSideTop.Side = asrBottom AnchorSideRight.Control = Owner AnchorSideRight.Side = asrBottom @@ -162,16 +160,39 @@ OnKeyPress = ListViewNotesKeyPress end end - object ButtonMenu: TSpeedButton + object StatusBar1: TStatusBar + Left = 0 + Height = 23 + Top = 378 + Width = 824 + Panels = <> + end + object ButtonClearSearch: TButton + AnchorSideLeft.Control = EditSearch + AnchorSideLeft.Side = asrBottom + AnchorSideTop.Control = Owner + AnchorSideBottom.Control = EditSearch + AnchorSideBottom.Side = asrBottom + Left = 292 + Height = 32 + Top = 0 + Width = 99 + Anchors = [akTop, akLeft, akBottom] + BorderSpacing.Left = 2 + Caption = 'Clear' + OnClick = ButtonClearSearchClick + TabOrder = 3 + end + object BitBtnMenu: TBitBtn AnchorSideLeft.Control = Owner AnchorSideTop.Control = Owner + AnchorSideBottom.Control = EditSearch AnchorSideBottom.Side = asrBottom - Left = 3 + Left = 0 Height = 32 Top = 0 - Width = 120 - BorderSpacing.Left = 3 - BorderSpacing.Right = 3 + Width = 140 + Anchors = [akTop, akLeft, akBottom] Caption = 'Menu' Glyph.Data = { 36090000424D3609000000000000360000002800000018000000180000000100 @@ -249,47 +270,23 @@ 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000 } - OnClick = ButtonMenuClick + OnClick = BitBtnMenuClick + TabOrder = 4 end - object StatusBar1: TStatusBar - Left = 0 - Height = 23 - Top = 378 - Width = 824 - Panels = <> - end - object SpeedSearchOtions: TSpeedButton - AnchorSideTop.Control = EditSearch + object ButtonSearchOptions: TButton + AnchorSideTop.Control = Owner AnchorSideRight.Control = Owner AnchorSideRight.Side = asrBottom - AnchorSideBottom.Control = ButtonMenu + AnchorSideBottom.Control = EditSearch AnchorSideBottom.Side = asrBottom - Left = 699 + Left = 680 Height = 32 - Hint = 'Search Options' Top = 0 - Width = 120 - Anchors = [akTop, akRight, akBottom] - BorderSpacing.Right = 5 + Width = 144 + Anchors = [akTop, akLeft, akRight, akBottom] Caption = 'Options' - OnClick = SpeedSearchOtionsClick - ShowHint = True - ParentShowHint = False - PopupMenu = PopupMenuSearchOptions - end - object SpeedButtonClearSearch: TSpeedButton - AnchorSideLeft.Control = EditSearch - AnchorSideLeft.Side = asrBottom - AnchorSideTop.Control = EditSearch - AnchorSideBottom.Control = ButtonMenu - AnchorSideBottom.Side = asrBottom - Left = 348 - Height = 32 - Top = 0 - Width = 120 - Anchors = [akTop, akLeft, akBottom] - Caption = 'Clear' - OnClick = SpeedButtonClearSearchClick + OnClick = ButtonSearchOptionsClick + TabOrder = 5 end object SelectDirectoryDialog1: TSelectDirectoryDialog Left = 344 diff -Nru tomboy-ng-0.36/source/searchunit.lrj tomboy-ng-0.36a/source/searchunit.lrj --- tomboy-ng-0.36/source/searchunit.lrj 2023-02-22 20:42:59.000000000 +1100 +++ tomboy-ng-0.36a/source/searchunit.lrj 2023-03-19 10:01:36.000000000 +1100 @@ -4,10 +4,9 @@ {"hash":4860802,"name":"tsearchform.buttonclearfilters.caption","sourcebytes":[67,108,101,97,114],"value":"Clear"}, {"hash":78352483,"name":"tsearchform.listboxnotebooks.hint","sourcebytes":[82,105,103,104,116,32,67,108,105,99,107,32,116,111,32,109,97,110,97,103,101,32,78,111,116,101,98,111,111,107,115],"value":"Right Click to manage Notebooks"}, {"hash":179900739,"name":"tsearchform.panel2.caption","sourcebytes":[78,111,116,101,98,111,111,107,115],"value":"Notebooks"}, -{"hash":343125,"name":"tsearchform.buttonmenu.caption","sourcebytes":[77,101,110,117],"value":"Menu"}, -{"hash":233995187,"name":"tsearchform.speedsearchotions.hint","sourcebytes":[83,101,97,114,99,104,32,79,112,116,105,111,110,115],"value":"Search Options"}, -{"hash":108725763,"name":"tsearchform.speedsearchotions.caption","sourcebytes":[79,112,116,105,111,110,115],"value":"Options"}, -{"hash":4860802,"name":"tsearchform.speedbuttonclearsearch.caption","sourcebytes":[67,108,101,97,114],"value":"Clear"}, +{"hash":4860802,"name":"tsearchform.buttonclearsearch.caption","sourcebytes":[67,108,101,97,114],"value":"Clear"}, +{"hash":343125,"name":"tsearchform.bitbtnmenu.caption","sourcebytes":[77,101,110,117],"value":"Menu"}, +{"hash":108725763,"name":"tsearchform.buttonsearchoptions.caption","sourcebytes":[79,112,116,105,111,110,115],"value":"Options"}, {"hash":89337013,"name":"tsearchform.menueditnotebooktemplate.caption","sourcebytes":[69,100,105,116,32,78,111,116,101,98,111,111,107,32,84,101,109,112,108,97,116,101],"value":"Edit Notebook Template"}, {"hash":73518027,"name":"tsearchform.menudeletenotebook.caption","sourcebytes":[68,101,108,101,116,101,32,78,111,116,101,98,111,111,107],"value":"Delete Notebook"}, {"hash":36354507,"name":"tsearchform.menurenamenotebook.caption","sourcebytes":[82,101,110,97,109,101,32,78,111,116,101,66,111,111,107],"value":"Rename NoteBook"}, diff -Nru tomboy-ng-0.36/source/searchunit.pas tomboy-ng-0.36a/source/searchunit.pas --- tomboy-ng-0.36/source/searchunit.pas 2023-02-22 20:42:59.000000000 +1100 +++ tomboy-ng-0.36a/source/searchunit.pas 2023-03-19 10:01:36.000000000 +1100 @@ -23,7 +23,7 @@ current title list. 20171005 - Added an ifdef Darwin to RecentNotes() to address a OSX bug that prevented the recent file names being updated. - 2017/10/10 - added a refresh button, need to make it auto but need to look at + 2017/10/10 - added a refresh ButtonSMenu, need to make it auto but need to look at timing implication for people with very big note sets first. 2017/10/10 - added the ability to update the stringlist when a new note is @@ -33,7 +33,7 @@ 2017/11/07 - switched over to using NoteLister, need to remove a lot of unused code. 2017/11/28 - fixed a bug I introduced while restructuring OpenNote to better - handle a note being auto saved. This bug killed the Link button in EditNote + handle a note being auto saved. This bug killed the Link ButtonSMenu in EditNote 2017/11/29 - check to see if NoteLister is still valid before passing on updates to a Note's status. If we are quiting, it may not be. 2017/12/03 Added code to clear Search box when it gets focus. Issue #9 @@ -71,11 +71,11 @@ 2018/12/29 Small improvements in time to save a file. 2019/02/01 OpenNote() now assignes a new note to the notebook if one is open (ie ButtonNotebookOptions is enabled) 2019/02/09 Move autosize stringgrid1 (back?) into UseList() - 2019/02/16 Clear button now calls UseList() to ensure autosize happens. + 2019/02/16 Clear ButtonSMenu now calls UseList() to ensure autosize happens. 2019/03/13 Now pass editbox the searchterm (if any) so it can move cursor to first occurance in note 2019/04/07 Restructured Main and Popup menus. Untested Win/Mac. 2019/04/13 Don't call note_lister.GetNotes more than absolutly necessary. - 2019/04/15 One Clear Filters button to replace Clea and Show All Notes. Checkboxes Mode instead of menu + 2019/04/15 One Clear Filters ButtonSMenu to replace Clea and Show All Notes. Checkboxes Mode instead of menu 2019/04/16 Fixed resizing atifacts on stringGrids by turning off 'Flat' property, Linux ! 2019/08/18 Removed AnyCombo and CaseSensitive checkboxes and replaced with SearchOptionsMenu, easier translations 2019/11/19 When reshowing an open note, bring it to current workspace, Linux only. Test on Wayland ! @@ -88,7 +88,7 @@ Better ctrl of Search Term highlight (but still highlit when makeing form re-visible). Drop Create Date and Filename from Search results string grid. But I still cannot control the little green triangles in stringgrid headings indicating sort. - 2020/02/01 Do not refresh the string grids automatically, turn on the refresh button for user to do it. + 2020/02/01 Do not refresh the string grids automatically, turn on the refresh ButtonSMenu for user to do it. 2020/02/19 hilight selected notebook name. 2020/03/09 Make sure 'x' (put in by a bug) is not a valid sync repo path. 2020/05/10 Faster search @@ -121,6 +121,7 @@ 2022/12/31 EditSearch now uses TestHint. 2023/01/11 Qt5 - ListViewNotesKeyPress now forces keypress to EditSearch 2023/01/11 Added Windows to above, BUT Mac cannot do this. So, disable on Mac. + 2023/03/17 Darken up Search Window in dark theme. } {$mode objfpc}{$H+} @@ -142,6 +143,9 @@ type { TSearchForm } TSearchForm = class(TForm) + BitBtnMenu: TBitBtn; + ButtonSearchOptions: TButton; + ButtonClearSearch: TButton; ButtonClearFilters: TButton; EditSearch: TEdit; ListBoxNotebooks: TListBox; @@ -161,12 +165,11 @@ Panel2: TPanel; PopupMenuSearchOptions: TPopupMenu; PopupMenuNotebook: TPopupMenu; - ButtonMenu: TSpeedButton; - SpeedButtonClearSearch: TSpeedButton; - SpeedSearchOtions: TSpeedButton; Splitter1: TSplitter; StatusBar1: TStatusBar; SelectDirectoryDialog1: TSelectDirectoryDialog; + procedure BitBtnMenuClick(Sender: TObject); + procedure ButtonClearSearchClick(Sender: TObject); procedure ButtonMenuClick(Sender: TObject); { If a search is underway, searches. Else, if we have an active notebook filter applied, reapply it. Failing @@ -177,6 +180,8 @@ //procedure EditSearchExit(Sender: TObject); procedure ButtonClearFiltersClick(Sender: TObject); + procedure ButtonSearchOptionsClick(Sender: TObject); + procedure ButtonSMenuClick(Sender: TObject); procedure EditSearchChange(Sender: TObject); procedure EditSearchEnter(Sender: TObject); procedure EditSearchKeyUp(Sender: TObject; var Key: Word; Shift: TShiftState); @@ -192,7 +197,7 @@ procedure FormShow(Sender: TObject); procedure ListBoxNotebooksClick(Sender: TObject); procedure ListBoxNotebooksMouseUp(Sender: TObject; - Button: TMouseButton; Shift: TShiftState; X, Y: Integer); + ButtonSMenu: TMouseButton; Shift: TShiftState; X, Y: Integer); procedure ListViewNotesColumnClick(Sender: TObject; Column: TListColumn ); procedure ListViewNotesData(Sender: TObject; Item: TListItem); @@ -217,8 +222,6 @@ other downloded note ID. Adjusts Note_Lister according and marks any note that is currently open as read only. Does not move files around. } procedure ProcessSyncUpdates(const DeletedList, DownList: TStringList); - procedure SpeedButtonClearSearchClick(Sender: TObject); - procedure SpeedSearchOtionsClick(Sender: TObject); // A proc that is called when a note is added to repo by, eg, an import. // The procedure's address is passed, via tb_utils, to the CLI unit so it // knows to call this direct if its not nil. @@ -255,7 +258,7 @@ procedure MenuListBuilder(MList: TList); procedure RecentMenuClicked(Sender: TObject); // Gets called to refresh the ListViewNotes in cases were we may not do it immediatly - // If ImmediateRefresh, we use the previously recorded NumbToRefresh and clear Button + // If ImmediateRefresh, we use the previously recorded NumbToRefresh and clear ButtonSMenu // Else re do a new search or clear depending on existing search parameters. procedure IndexAndRefresh(DisplayOnly: boolean = false); function RemoveFromHelpList(const FullHelpNoteFileName: string): boolean; @@ -308,9 +311,9 @@ //function IsThisaTitle(const Term: ANSIString): boolean; { Gets called with a title and filename (clicking grid), with just a title - (clicked a note link or recent menu item or Link Button) or nothing + (clicked a note link or recent menu item or Link ButtonSMenu) or nothing (new note). If its just Title but Title does not exist, its Link - Button. DontBackUp says do not make a backup as we opne because we are in + ButtonSMenu. DontBackUp says do not make a backup as we opne because we are in a Roll Back Cycle.} procedure OpenNote(NoteTitle: String; FullFileName: string = ''; TemplateIs: AnsiString = ''; BackUp: boolean = True; InSearch : boolean = false) ; @@ -693,7 +696,7 @@ begin InitialiseHelpFiles(); PopupTBMainMenu := TPopupMenu.Create(self); // LCL will dispose because of 'self' - ButtonMenu.PopupMenu := PopupTBMainMenu; + BitBtnMenu.PopupMenu := PopupTBMainMenu; MainForm.MainTBMenu := TPopupMenu.Create(self); MainForm.ButtMenu.PopupMenu := MainForm.MainTBMenu; // Add any other 'fixed' menu here. @@ -1025,7 +1028,7 @@ EditSearch.CaretPos := APoint; end; } if (EditSearch.Text <> '') and (EditSearch.Text <> rsMenuSearch) then - SpeedButtonClearSearch.Enabled := True; + ButtonClearSearch.Enabled := True; if (not Sett.AutoSearchUpdate) or (not visible) or (length(EditSearch.Text)=1) then exit; STL := TStringList.Create; try @@ -1260,7 +1263,7 @@ TheMainNoteLister.LoadListNotebooks(ListBoxNotebooks.Items, ButtonClearFilters.Enabled); EditSearch.Hint:=rsSearchHint; EditSearch.TextHint := rsMenuSearch; - SpeedButtonClearSearch.Enabled := False; + ButtonClearSearch.Enabled := False; EditSearch.SelStart := 1; EditSearch.SelLength := length(EditSearch.Text); RefreshMenus(mkAllMenu); // IndexNotes->UseList has already called RefreshMenus(mkRecentMenu) and Qt5 does not like it. @@ -1277,36 +1280,53 @@ TheReindexProc := @IndexNewNote; end; - - procedure TSearchForm.FormShow(Sender: TObject); +var + Butt : TButton; begin Left := Placement + random(Placement*2); Top := Placement + random(Placement * 2); -// {$ifdef windows} // linux apps know how to do this themselves - if Sett.DarkTheme then begin // Note - Windows won't let us change button colour anymore. +(* // {$ifdef windows} // gtk2 and qt5 with QT_QPA_PLATFORMTHEME linux apps know how to do this themselves +// if Sett.DarkTheme then begin // Note - Windows won't let us change button colour anymore. + Color := Sett.AltColour; // black is 000000, white FFFFFF +// Color := clGray; + font.Color := Sett.TextColour; // Sets children font colour too +// ListBoxNotebooks.Color := Sett.AltColour; +// ListBoxNotebooks.Font.Color := clWhite; + ListBoxNotebooks.Color := Sett.BackGndColour; - ListBoxNoteBooks.Font.Color := Sett.TextColour; - EditSearch.Color := Sett.BackGndColour; - EditSearch.Font.Color := Sett.TextColour; -// color := Sett.HiColour; - Color := Sett.BackGndColour; - font.color := Sett.TextColour; - ListViewNotes.Color := clnavy; -// ListViewNotes.Font.Color := Sett.HiColour; - ListViewNotes.Font.Color := Sett.BackGndColour; +// ListBoxNoteBooks.Font.Color := Sett.TextColour; + EditSearch.Color := Sett.AltColour; +// EditSearch.Font.Color := Sett.TextColour; +// Color := Sett.BackGndColour; // OK, this seems to set ListBoxNotes font to Black ????? +// font.color := Sett.TextColour; +// ListViewNotes.Color := clnavy; +// ListViewNotes.Font.Color := Sett.BackGndColour; splitter1.Color:= clnavy; - end; + ButtonClearFilters.Color := Sett.AltColour; *) // Does work for Qt5, not for GTK2 (but not needed), Windows ? + + if Sett.DarkThemeSwitch then begin // We are not relying on OS to set dark theme, it was --dark-theme + Color := Sett.AltColour; // black is 000000, white FFFFFF + font.Color := Sett.TextColour; // Sets children font colour too + ListBoxNotebooks.Color := Sett.BackGndColour; + EditSearch.Color := Sett.AltColour; + splitter1.Color:= clnavy; + for Butt in [ButtonClearFilters, BitBtnMenu, ButtonSearchOptions, ButtonClearSearch ] do + Butt.Color := Sett.AltColour; // Does work for Qt5, not for GTK2 (but not needed), Windows ? + end; + + +// end; // MenuItemAutoRefresh.Checked := Sett.Autorefresh; ListViewNotes.Color := ListBoxNoteBooks.Color; - ListViewNotes.Font.Color := ListBoxNotebooks.Font.Color; +// ListViewNotes.Font.Color := ListBoxNotebooks.Font.Color; // {$endif} ListBoxNotebooks.Hint := rsNotebookOptionRight; if (ListViewNotes.Column[0].SortIndicator = siNone) then begin BounceSortIndicator(1); end; {$ifdef LCLCOCOA} - ButtonMenu.Refresh; + ButtonSMenu.Refresh; ListBoxNotebooks.Hint := rsNotebookOptionCtrl; // EditSearch.SetFocus; // Cocoa issue, 'cos we cannot make the "on type, jump to EditSearch" work on Mac {$endif} @@ -1636,7 +1656,7 @@ { ----------------- NOTEBOOK STUFF -------------------- } - // This button clears both search term (if any) and restores all notebooks and + // This ButtonSMenu clears both search term (if any) and restores all notebooks and // displays all available notes. procedure TSearchForm.ButtonClearFiltersClick(Sender: TObject); begin @@ -1655,6 +1675,10 @@ UpdateStatusBar(inttostr(ListViewNotes.Items.Count) + ' ' + rsNotes); end; + + + + procedure TSearchForm.ListBoxNotebooksClick(Sender: TObject); var STL : TStringList; @@ -1675,12 +1699,12 @@ end; // Popup a menu when rightclick a notebook -procedure TSearchForm.ListBoxNotebooksMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); +procedure TSearchForm.ListBoxNotebooksMouseUp(Sender: TObject; ButtonSMenu: TMouseButton; Shift: TShiftState; X, Y: Integer); var HaveItem : boolean; begin // debugln('TSearchForm.ListBoxNotebooksMouseDown - Selected in listboxnotebook ' + dbgs(ListBoxNotebooks.ItemIndex)); - if {$ifdef DARWIN} (ssCtrl in Shift) {$ELSE} (Button = mbRight) {$ENDIF} then begin + if {$ifdef DARWIN} (ssCtrl in Shift) {$ELSE} (ButtonSMenu = mbRight) {$ENDIF} then begin HaveItem := (ListBoxNotebooks.ItemIndex > -1); PopupMenuNotebook.Items[0].Enabled := HaveItem; PopupMenuNotebook.Items[1].Enabled := HaveItem; @@ -1691,10 +1715,8 @@ end; end; - -procedure TSearchForm.ButtonMenuClick(Sender: TObject); +procedure TSearchForm.ButtonSMenuClick(Sender: TObject); begin - //ShowListIndicator('From Menu'); PopupTBMainMenu.popup; end; @@ -1786,9 +1808,10 @@ end; -procedure TSearchForm.SpeedSearchOtionsClick(Sender: TObject); +procedure TSearchForm.ButtonSearchOptionsClick(Sender: TObject); + begin - PopupMenuSearchOptions.PopUp; + PopupMenuSearchOptions.PopUp; end; procedure TSearchForm.MenuItemSWYTClick(Sender: TObject); @@ -1798,7 +1821,7 @@ TheMainNoteLister.IndexNotes(); end; -procedure TSearchForm.SpeedButtonClearSearchClick(Sender: TObject); +procedure TSearchForm.ButtonClearSearchClick(Sender: TObject); begin EditSearch.text := ''; //rsMenuSearch; //EditSearch.SetFocus; @@ -1814,7 +1837,17 @@ DoSearchEnterPressed(); SearchActive := False; UpdateStatusBar(inttostr(ListViewNotes.Items.Count) + ' ' + rsNotes); - SpeedButtonClearSearch.Enabled := false; + ButtonClearSearch.Enabled := false; +end; + +procedure TSearchForm.BitBtnMenuClick(Sender: TObject); +begin + PopupTBMainMenu.popup; +end; + +procedure TSearchForm.ButtonMenuClick(Sender: TObject); +begin + end; diff -Nru tomboy-ng-0.36/source/settings.lfm tomboy-ng-0.36a/source/settings.lfm --- tomboy-ng-0.36/source/settings.lfm 2023-02-22 20:42:59.000000000 +1100 +++ tomboy-ng-0.36a/source/settings.lfm 2023-03-19 10:01:36.000000000 +1100 @@ -13,7 +13,7 @@ OnHide = FormHide OnKeyDown = FormKeyDown OnShow = FormShow - LCLVersion = '2.3.0.0' + LCLVersion = '2.2.0.2' object PageControl1: TPageControl AnchorSideLeft.Control = Owner AnchorSideTop.Control = Owner @@ -24,10 +24,10 @@ Height = 488 Top = 0 Width = 726 - ActivePage = TabSync + ActivePage = TabDisplay Anchors = [akTop, akLeft, akRight, akBottom] BorderSpacing.Bottom = 2 - TabIndex = 2 + TabIndex = 1 TabOrder = 0 OnChange = PageControl1Change object TabBasic: TTabSheet @@ -537,7 +537,7 @@ BorderSpacing.Top = 15 BorderSpacing.Right = 3 Caption = ' Sync ' - ClientHeight = 224 + ClientHeight = 243 ClientWidth = 712 ParentColor = False TabOrder = 1 @@ -571,7 +571,7 @@ AnchorSideBottom.Side = asrBottom Left = 548 Height = 32 - Top = 182 + Top = 201 Width = 154 Anchors = [akRight, akBottom] BorderSpacing.Right = 10 @@ -589,7 +589,7 @@ Left = 172 Height = 23 Hint = 'Sync, if possible once an hour.' - Top = 191 + Top = 210 Width = 101 Anchors = [akLeft, akBottom] BorderSpacing.Left = 30 @@ -631,7 +631,7 @@ AnchorSideBottom.Side = asrBottom Left = 15 Height = 23 - Top = 191 + Top = 210 Width = 127 Anchors = [akLeft, akBottom] Caption = 'Sync Enabled' @@ -653,7 +653,7 @@ BorderSpacing.Left = 15 BorderSpacing.Top = 5 Caption = 'Token' - ClientHeight = 35 + ClientHeight = 54 ClientWidth = 483 TabOrder = 2 object LabelToken: TLabel diff -Nru tomboy-ng-0.36/source/settings.pas tomboy-ng-0.36a/source/settings.pas --- tomboy-ng-0.36/source/settings.pas 2023-02-22 20:42:59.000000000 +1100 +++ tomboy-ng-0.36a/source/settings.pas 2023-03-19 10:01:36.000000000 +1100 @@ -105,6 +105,8 @@ 2022/10/21 CheckAutoStart must call its own method to trigger writing files 2023/01/14 Save Auto Snapshot settings 2023/02/21 Drop Monospace font to last of priority, its not a real font. + 2023/03/11 Make a bool to indicate Qt is in charge of its colours, eg QT_QPA_PLATFORMTHEME + 2023/03/18 Ensure AltColour and AltBackGndColor are set to something in user defined scheme } {$mode objfpc}{$H+} // @@ -270,6 +272,7 @@ procedure TabSpellResize(Sender: TObject); procedure TimerAutoSyncTimer(Sender: TObject); // Sets default colours, depending on dark or light theme + // Called from MainForm.ShowForm procedure SetColours; private @@ -286,6 +289,8 @@ fExportPath : ANSIString; SearchIsCaseSensitive : boolean; NextAutoSnapshot : TDateTime; + // Sets some default colours (find better way) and sets Colour Button hint. + procedure CheckUserColours; // Looks in expected place for help notes, populate combo and public vars, HelpNotesPath, HelpNotesLang. procedure LoadHelpLanguages(); // We load settings from confile or, if not available, sensible defaults, save. @@ -345,6 +350,7 @@ HelpNotesLang : string; // either two char code or '' AreClosing : boolean; // False until set true by mainUnit FormClose. BackGndColour : TColor; + AltBackGndColor : TColor; // When selected Text looses focus TextColour : TColor; HiColour : TColor; TitleColour : TColor; @@ -353,7 +359,9 @@ UsualFont : string; FixedFont : string; DefaultFixedFont : string; - DarkTheme : boolean; + DarkThemeSwitch : boolean; // Dark Theme because user provided --dark-theme, set in main unit. + DarkTheme : boolean; // Dark Theme because we detected it ourselves. Set by main unit. + QtOwnsColours : boolean; // Qt[5,6] is in charge of its own colours, probably using QT_QPA_PLATFORMTHEME, but not for kmemo DebugModeSpell : boolean; // Indicates SettingsChanged should not write out a new file cos we are loading from one. MaskSettingsChanged : boolean; @@ -405,7 +413,6 @@ Sett : TSett; const - // Note we set DarkTheme colors and all HiLight colours in MainUnit ?? No, we set them here ! Placement = 45; // where we position an opening window. Its, on average, 1.5 time Placement; @@ -433,6 +440,7 @@ Colours, Clipbrd, tb_symbol, + uQt_Colors, ResourceStr; // only partially so far .... var @@ -718,6 +726,7 @@ // user user has 'closed' (ie hide) then Spell was freed. MaskSettingsChanged := False; Label15.Caption:=''; + CheckUserColours; end; // We only really close when told by RTSearch that The Exit Menu choice from TrayIcon was clicked. @@ -869,6 +878,9 @@ end; end; + + + // Will read and apply the config file if available, else sets sensible defaults // Is only called at startup and assumes the config dir has been checked and // LabelSettingPath.Caption contains an appropriate file name. @@ -919,6 +931,7 @@ FixedFont := ConfigFile.readstring('BasicSettings', 'FixedFont', DefaultFixedFont); if FixedFont = '' then FixedFont := DefaultFixedFont; ButtonFixedFont.Hint := FixedFont; + // ------------------- C O L O U R S ------------------- BackGndColour:= StringToColor(Configfile.ReadString('BasicSettings', 'BackGndColour', '0')); HiColour := StringToColor(Configfile.ReadString('BasicSettings', 'HiColour', '0')); TextColour := StringToColor(Configfile.ReadString('BasicSettings', 'TextColour', '0')); @@ -926,6 +939,7 @@ LinkColour := StringToColor(Configfile.ReadString('BasicSettings', 'LinkColour', '0')); UserSetColours := not ((BackGndColour = 0) and (HiColour = 0) and (TextColour = 0) and (TitleColour = 0) and (LinkColour = 0)); // Note - '0' is a valid colour, black. So, what says its not set is they are all '0'; + CheckUserColours; HelpNotesLang := Configfile.ReadString('BasicSettings', 'HelpLanguage', HelpNotesLang); SetHelpLanguage(); @@ -1160,28 +1174,61 @@ end; end; +{ Colors - if its GTK2 or a Qt5 with a QT_QPA_PLATFORMTHEME=[gtk2, qt5ct] then most colors will be right. + However, the KMemo might be wrong as its always set to a defult light set, ignoring OS. + So, we must always set Sett's colors for, at least, KMemo to use. + DarkThemeSwitch tells us to apply the setting to what ever other components we can too. + SetColors is called by TMainForm.TestDarkThemeInUse during startup, DarkTheme* may have been set. + It tests for a gtk2, qt5 using qt5ct and defers to qt5ct if possible. Otherwise, sets some + (hopefully) appropriate colors for either a light or dark theme. These colors + are always used for the KMemo and possibly, when DarkThemeSwich is used, for what other + screens I can. } + procedure TSett.SetColours; +{$ifdef LCLQT5} +var + Qt_Colors : TQt_Colors; {$endif} // pink = $EEEEFF, White is $FFFFFF, Black is $000000 begin - if DarkTheme then // ToDo : must add this to user set colours, sigh ..... - //AltColour := $282828 // Gray, BackGround Colour of Alternating rows in some ListViews - AltColour := $606060 // A colour that will show both black and white test - else AltColour := clDefault; // it gets used as a background and needs to be a bit near it + {$ifdef LCLQT5} // First we will try the special Qt5 ways of settings colours + // If user has set QT_QPA_PLATFORMTHEME=gtk2 this bit drops through, all components except KMemo are good. + Qt_Colors := TQt_Colors.Create; // needs some work for qt6 + try + if Qt_Colors.FoundColors then begin // Will be false if user not using qt5ct + BackGndColour:= Qt_Colors_Rec.QColorBackground; + HiColour := Qt_Colors_Rec.QColorHighLight+1; // This is, eg Crtl H type highlighting, not selection. +1 to make unique + AltColour := Qt_Colors_Rec.QColorLessBright; // Used for selected Text + TextColour := Qt_Colors_Rec.QColorText; + TitleColour:= Qt_Colors_Rec.QColorLink; + LinkColour := Qt_Colors_Rec.QColorLink; + AltBackGndColor := Qt_Colors_Rec.QColorLessBright; // Selected background colour + QtOwnsColours := true; + exit; + end; + finally + Qt_Colors.Free; + end; + {$endif} if UserSetColours then exit; // will have already been set by config or by colour form. - if DarkTheme then begin - //debugln('Its definltly a Dark Theme'); - BackGndColour:= clBlack; // eg $000000 - HiColour := clDkGray; - TextColour := clLtGray; - TitleColour:= clTeal; - LinkColour := clTeal; + if DarkTheme or DarkThemeSwitch then begin + BackGndColour:= $303030; // KMemo Background + AltColour := $606060; // Some panel's background color + HiColour := $600001; // a dark blue; This is, eg Crtl H type highlighting, not selection ! + TextColour := clWhite; + TitleColour:= $B8B800; + LinkColour := $B8B801; + AltBackGndColor := clGray; // Selected text, both focused and unfocused end else begin BackGndColour := clCream; - HiColour := clYellow; + AltColour := clDefault; + HiColour := clYellow-1; TextColour := clBlack; TitleColour := clBlue; - LinkColour := clBlue; + LinkColour := clBlue+1; // One unit of red, no one will notice, but don't subtract 1 from xxxx00 or add 1 to xxxxFF + AltBackGndColor := clLtGray; end; + // if DarkThemeSwitch then color := AltColour; No, cannot change color of the Tabsheet, looks horrible + end; procedure TSett.SetHelpLanguage(); @@ -1263,8 +1310,19 @@ WriteConfigFile(); end; end; + CheckUserColours; end; +procedure TSett.CheckUserColours; +begin + if UserSetColours then begin + ButtonSetColours.Hint := 'Custom Colours in use'; + // ToDo : AltBackGndColour may not be appropriate here, wot is ? And AltColour ???? + AltBackGndColor := clGray; + AltColour := clLtGray; + end else + ButtonSetColours.Hint := 'Default Colours'; +end; procedure TSett.ButtonFixedFontClick(Sender: TObject); var ISMono : boolean = false; diff -Nru tomboy-ng-0.36/source/tb_symbol.lfm tomboy-ng-0.36a/source/tb_symbol.lfm --- tomboy-ng-0.36/source/tb_symbol.lfm 2023-02-22 20:42:59.000000000 +1100 +++ tomboy-ng-0.36a/source/tb_symbol.lfm 2023-03-19 10:01:36.000000000 +1100 @@ -7,7 +7,7 @@ ClientHeight = 372 ClientWidth = 685 OnCreate = FormCreate - LCLVersion = '2.3.0.0' + LCLVersion = '2.2.0.2' object StringGrid1: TStringGrid AnchorSideLeft.Control = Owner AnchorSideTop.Control = Owner diff -Nru tomboy-ng-0.36/source/tb_symbol.pas tomboy-ng-0.36a/source/tb_symbol.pas --- tomboy-ng-0.36/source/tb_symbol.pas 2023-02-22 20:42:59.000000000 +1100 +++ tomboy-ng-0.36a/source/tb_symbol.pas 2023-03-19 10:01:36.000000000 +1100 @@ -143,6 +143,7 @@ Result := ((byte(Value) shr TheBit) and 1) = 1; end; begin + result := false; case length(Uch) of 0 : exit(false); 1 : exit(not BitSet(Uch[1], 7)); // 0xxxxxxx diff -Nru tomboy-ng-0.36/source/Tomboy_NG.lpi tomboy-ng-0.36a/source/Tomboy_NG.lpi --- tomboy-ng-0.36/source/Tomboy_NG.lpi 2023-02-22 20:42:59.000000000 +1100 +++ tomboy-ng-0.36a/source/Tomboy_NG.lpi 2023-03-19 10:01:36.000000000 +1100 @@ -900,12 +900,22 @@ <local> <CommandLineParams Value="--config-dir=/home/dbannon/.config/tomboy-ng-alt"/> </local> + <environment> + <UserOverrides Count="1"> + <Variable0 Name="QT_QPA_PLATFORMTHEME" Value="qt5ct"/> + </UserOverrides> + </environment> <FormatVersion Value="2"/> <Modes Count="1"> <Mode0 Name="default"> <local> <CommandLineParams Value="--config-dir=/home/dbannon/.config/tomboy-ng-alt"/> </local> + <environment> + <UserOverrides Count="1"> + <Variable0 Name="QT_QPA_PLATFORMTHEME" Value="qt5ct"/> + </UserOverrides> + </environment> </Mode0> </Modes> </RunParams> @@ -920,7 +930,7 @@ <PackageName Value="LCL"/> </Item3> </RequiredPackages> - <Units Count="38"> + <Units Count="39"> <Unit0> <Filename Value="Tomboy_NG.lpr"/> <IsPartOfProject Value="True"/> @@ -1135,6 +1145,11 @@ <IsPartOfProject Value="True"/> <UnitName Value="fpTTF"/> </Unit37> + <Unit38> + <Filename Value="uqt_colors.pas"/> + <IsPartOfProject Value="True"/> + <UnitName Value="uQt_Colors"/> + </Unit38> </Units> </ProjectOptions> <CompilerOptions> diff -Nru tomboy-ng-0.36/source/Tomboy_NG.lpr tomboy-ng-0.36a/source/Tomboy_NG.lpr --- tomboy-ng-0.36/source/Tomboy_NG.lpr 2023-02-22 20:42:59.000000000 +1100 +++ tomboy-ng-0.36a/source/Tomboy_NG.lpr 2023-03-19 10:01:36.000000000 +1100 @@ -25,7 +25,7 @@ Notebook, Spelling, Mainunit, BackupView, recover, Index, autostart, hunspell, sync, syncutils, ResourceStr, colours, cli, RollBack, commonmark, notenormal, transgithub, - import_notes, JsonTools, kmemo2pdf, tb_symbol, fpTTF; + import_notes, JsonTools, kmemo2pdf, tb_symbol, fpTTF, uQt_Colors; {$R *.res} diff -Nru tomboy-ng-0.36/source/uqt_colors.pas tomboy-ng-0.36a/source/uqt_colors.pas --- tomboy-ng-0.36/source/uqt_colors.pas 1970-01-01 10:00:00.000000000 +1000 +++ tomboy-ng-0.36a/source/uqt_colors.pas 2023-03-19 10:01:36.000000000 +1100 @@ -0,0 +1,166 @@ +unit uQt_Colors; +{ Copyright (C) 2023 David Bannon + + License: + This code is licensed under BSD 3-Clause Clear License, see file License.txt + or https://spdx.org/licenses/BSD-3-Clause-Clear.html + + ------------------ + + This is a unit, only invoked if using the Qt5 widget set (some mods needed for Qt6) + that will alter how the app manages colours if (and only IF) the user has the + QT_QPA_PLATFORMTHEME=qt5ct in the env. It does NOT respect the -platformtheme switch + because one dash means one char switch in POSIX, so, we don't consider + -platformtheme qt5ct is a switch. (TApplication does make the commandline + available Davo ....) + This unit reads the colours that qt5ct wants us to use and passes a subset + of them back for KMemo to use. + + Note : Unix only, makes some assumptions about paths, easy fix .... + + History : + 2023-03-13 Initial release. +} +{$mode ObjFPC}{$H+} + +interface + +uses + Classes, SysUtils, graphics; + +type TQt_Colors_Rec = record + QColorLink : TColor; + QColorBright : TColor; + QColorLessBright : TColor; + QColorBackground : TColor; + QColorAltBackGround : TColor; + QColorText : TColor; + QColorHighLight : Tcolor; + end; + +{ TQt_Colors } +type + TQt_Colors = class + private + function GetActiveColors : string; + function GetIndexedColor(CSt : string; const Index : integer) : TColor; + + public + FoundColors : boolean; + constructor Create(); +end; + +var + Qt_Colors_Rec : TQt_Colors_Rec; + +implementation + +uses IniFiles, Forms; + +const + CONF = '/.config/qt5ct/qt5ct.conf'; // the conf file has an entry that points to the selected color_scheme + +{ TQt_Colors } + +function TQt_Colors.GetActiveColors: string; +var + ConfigFile : TINIFile; +begin + result := GetEnvironmentVariable('HOME') + CONF; + if FileExists(result) then begin + ConfigFile := TINIFile.Create(result); + try + result := ConfigFile.readstring('Appearance', 'color_scheme_path', ''); + finally + ConfigFile.free; + end; + end; + if Result = '' then exit; + if FileExists(Result) then begin + ConfigFile := TINIFile.Create(Result); + try + result := ConfigFile.readstring('ColorScheme', 'active_colors', ''); + finally + ConfigFile.free; + end; + end; +end; + +function TQt_Colors.GetIndexedColor(CSt: string; const Index: integer): TColor; +var + StL : TStringList; + St : String; + CValue : Cardinal; + R, G, B : byte; // thats the order in Qt's view +begin + StL := TStringList.Create; // probably more efficent to use CSt.Split ..... + StL.Delimiter := ' '; + Stl.DelimitedText := CSt; + St := StL[Index]; + Stl.Free; + if St.length < 1 then exit(clBlack); // ToDo : That is an uncaught error + St[1] := '$'; + St := St.Replace(',', ''); + CValue := strtoInt(St) and $ffffff; + B := CValue and $ff; + CValue := CValue shr 8; + G := CValue and $ff; + CValue := CValue shr 8; + R := CValue and $ff; + result := TColor((B shl 16) + (G shl 8) + R); // Thats TColor order. +end; + +constructor TQt_Colors.Create(); +var + St : String; +begin + if (GetEnvironmentVariable('QT_QPA_PLATFORMTHEME') <> 'qt5ct') then exit; // Note : not responding to -platformtheme switch + St := GetActiveColors(); + if St = '' then exit; + Qt_Colors_Rec.QColorText := GetIndexedColor(St, 0); // 0 is Text - used for usual text + Qt_Colors_Rec.QColorBright := GetIndexedColor(St, 2); // 2 is Bright + Qt_Colors_Rec.QColorLessBright := GetIndexedColor(St, 3); // 3 is LessBright + Qt_Colors_Rec.QColorBackground := GetIndexedColor(St, 9); // 9 is background + Qt_Colors_Rec.QColorLink := GetIndexedColor(St, 14); // 14 is Link index 0..19 + Qt_Colors_Rec.QColorHighLight := GetIndexedColor(St, 12); + Qt_Colors_rec.QColorAltBackGround := GetIndexedColor(St, 16); + FoundColors := True; + //writeln('We have found suitable qt5ct colors'); +end; + +end. + +{ +WindowText = 0; +NormalBackGround = 1; +Link = 14; + +if we have a qt env setting, QT_QPA_PLATFORMTHEME=qt5ct we can +look in /$HOME/.config/qt5ct/qt5ct.conf Its an ini file that we will find, in +section [Appearance], color_scheme_path, value being eg /usr/share/qt5ct/colors/darker.conf + +We open this file, also ini, the value of [ColorScheme], has a line that looks like this - + +active_colors=#ffffff, #424245, #979797, #5e5c5b, #302f2e, #4a4947, #ffffff, #ffffff, #ffffff, #3d3d3d, #222020, #e7e4e0, #12608a, #f9f9f9, #0986d3, #a70b06, #5c5b5a, #ffffff, #3f3f36, #ffffff + +each subvalue may be 6 or 8 hex digits, we loose the first two if its 8. + +White = #FFFFFF (careful, apparently Qt can be funny about ffffff) +Six Digits, Red, Green, Blue, 2 each. Higher value means lighter. +Black is #222222 - I guess it gets blacker than this but not in the themes I see. + +Red = #ff0000 +Green = #00FF00 +Blue = #0000FF + +Digits to left of 6 rightmost characters are Opacity. Strip them off. + +TColor - Blue-Green-Red +========= +clBlue = TColor($FF0000); +clRed = TColor($0000FF); +clGreen = TColor($008000); +clBlack = TColor($000000); +clWhite = TColor($FFFFFF); + +} diff -Nru tomboy-ng-0.36/whatsnew tomboy-ng-0.36a/whatsnew --- tomboy-ng-0.36/whatsnew 2023-02-22 20:42:59.000000000 +1100 +++ tomboy-ng-0.36a/whatsnew 2023-03-19 10:01:36.000000000 +1100 @@ -1,10 +1,3 @@ -From 0.35 to 0.36 - -New Feature export as PDF. -New Feature insert a symbol or accented character. -Bug fix in column mode of calculator. -Warn user about setting non mono font. -All Tomdroid functionality removed. -A fix for SWYT not finding some text in a brand new note. -Can set colour of a link, more suitable default. -Use of TextHint to better indicate EditSearch role. -Revised note button colors for better dark theme use. +More uniform colors when used with qt5ct. +Man page added info re colors. +Indicator that custom colors being used.