From 852cc782f198e250ba30f8b3974a39a66cbd1164 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Jaakko=20Kera=CC=88nen?= jaakko.keranen@iki.fi
Date: Thu, 9 May 2024 09:41:40 +0300
Subject: [PATCH 1/1] TUI: Terminal UI improvements
The most important shortcuts are shown on the menubar/status line.
Fixed various UI glitches with dialogs, behavior, and layout.
po/en.po | 34 +++++++++++++
res/lang/cs.bin | Bin 38442 -> 38635 bytes
res/lang/de.bin | Bin 37370 -> 37563 bytes
res/lang/en.bin | Bin 33649 -> 33842 bytes
res/lang/eo.bin | Bin 33028 -> 33221 bytes
res/lang/es.bin | Bin 38041 -> 38234 bytes
res/lang/es_MX.bin | Bin 34401 -> 34594 bytes
res/lang/eu.bin | Bin 37549 -> 37742 bytes
res/lang/fi.bin | Bin 36970 -> 37163 bytes
res/lang/fr.bin | Bin 38865 -> 39058 bytes
res/lang/gl.bin | Bin 36848 -> 37041 bytes
res/lang/hu.bin | Bin 37938 -> 38131 bytes
res/lang/ia.bin | Bin 36708 -> 36901 bytes
res/lang/ie.bin | Bin 36086 -> 36279 bytes
res/lang/isv.bin | Bin 32429 -> 32622 bytes
res/lang/it.bin | Bin 37479 -> 37672 bytes
res/lang/ja.bin | Bin 32589 -> 32782 bytes
res/lang/nl.bin | Bin 35660 -> 35853 bytes
res/lang/pl.bin | Bin 37150 -> 37343 bytes
res/lang/ru.bin | Bin 56053 -> 56246 bytes
res/lang/sk.bin | Bin 32707 -> 32900 bytes
res/lang/sr.bin | Bin 53797 -> 53990 bytes
res/lang/tok.bin | Bin 34651 -> 34844 bytes
res/lang/tr.bin | Bin 37687 -> 37880 bytes
res/lang/uk.bin | Bin 55091 -> 55284 bytes
res/lang/zh_Hans.bin | Bin 32281 -> 32474 bytes
res/lang/zh_Hant.bin | Bin 32613 -> 32806 bytes
src/app.c | 2 +-
src/defs.h | 4 ++
src/ui/certlistwidget.c | 23 ++++++---
src/ui/documentwidget.c | 12 ++++-
src/ui/inputwidget.c | 2 +-
src/ui/root.c | 109 ++++++++++++++++++++++++++++++++++++----
src/ui/util.c | 11 +++-
34 files changed, 174 insertions(+), 23 deletions(-)
diff --git a/po/en.po b/po/en.po
index 476ed3f1..cc4a765d 100644
--- a/po/en.po
+++ b/po/en.po
@@ -2639,4 +2639,38 @@ msgstr "Content:"
msgid "snip.accept"
msgstr "Save Snippet"
+# Keyboard shortcut for the terminal. Should be very short or abbreviated.
+msgid "term.url"
+msgstr "Enter URL"
+# Keyboard shortcut for the terminal. Should be very short or abbreviated.
+msgid "term.linkkeys"
+msgstr "Open link"
+# Keyboard shortcut for the terminal. Should be very short or abbreviated.
+msgid "term.menu"
+msgstr "Context menu"
+# Keyboard shortcut for the terminal. Should be very short or abbreviated.
+msgid "term.menubar"
+msgstr "Menubar"
+# Keyboard shortcut for the terminal. Should be very short or abbreviated.
+msgid "term.sidebar"
+msgstr "Sidebar"
+# Keyboard shortcut for the terminal. Should be very short or abbreviated.
+msgid "term.tab.new"
+msgstr "New tab"
+# Keyboard shortcut for the terminal. Should be very short or abbreviated.
+msgid "term.tab.close"
+msgstr "Close tab"
+# Keyboard shortcut for the terminal. Should be very short or abbreviated.
+msgid "term.hover"
+msgstr "Focus link"
+# Keyboard shortcut for the terminal. Should be very short or abbreviated.
+msgid "term.focus"
+msgstr "Focus"
diff --git a/res/lang/cs.bin b/res/lang/cs.bin
index 11b3db07a3a9b8e6d05c69a3a4e839408d9ab403..69e519147cfbdb3e243442781e4a3fe3bc4d906b 100644
GIT binary patch
delta 207
zcmZ3rhUxWMrVXN#>r;zz_0sZ_ON$xYz+?$XAS1slwFn}hkdv90%>Wh!v9ePuiy8b2
zQuC0+b5rw58JzR;N>VFI6u=y?au6#iv53JJN`nQ9GgDGQg27PQ0W4aQn537SlV6<5
o;0z)afP9FRAc?%xat6QDa)e-MQ4WJE(6%Cl&>)}9!jr|B0TEwH4gdfE
delta 14
WcmaF8mTA=*rVXN#H(#49$_xNDBL;r}
diff --git a/res/lang/de.bin b/res/lang/de.bin
index de4474ad80912adfea0e65ad4311f21d42dcdcab..f30fc5a91741a9527b1f6a914d36490f5f6bfbb2 100644
GIT binary patch
delta 207
zcmeyhm}&P?rVWDq^{GX<dTIH|rNs<xV6p@xkda@OS_BbL$jQvhW&n$VSlOwS#SH!h
zsd-4^xv6=j49@v^C8-r93SbUcIf#{%Sj6B9rNM&5nJK9t!C)xu02VDtOwvov$uCZ2
oa0ZbIKt9AukVIZ;IfGwnIYO|sD2KrnXj_p&Xpqll{{GiY02zo%-~a#s
delta 14
WcmdnJl<C)ErVWDqn=kdhWC8#;hzC&s
diff --git a/res/lang/en.bin b/res/lang/en.bin
index 0f65af65c79c3cba9c1c14bf07f2abc71e5aada5..8bbb202690bc892673d503643e1e7694b72675e6 100644
GIT binary patch
delta 191
zcmey^#<Zz}X~U|9qZLay|nz~(qaZTFj)c;$jC2CErJLr<YeY$Gk
@wtnAdvVg~<$
z)I22d+|;~M2Iu^|lGKV41uzG!9K=dWEMoA5(qO^j%#>7+U@(+s0f|nYA1JC0mM%$5
j(#uONXYflcR{jh_LdgqFt`FuFH#5%^4Ywi;Up6P$4WM
delta 14
Vcmdng!Su0>X~U|9&Do8|nE*A{2KWE~
diff --git a/res/lang/eo.bin b/res/lang/eo.bin
index ab5944c7f07eafa986ba29c4e2a22caf0d014299..857dfe5d89c5bc0a28b607e41275c0792b36fa0f 100644
GIT binary patch
delta 207
zcmZo^VmjK)w85gTKD8)UFD*a0w3xvSOqPHIGV;q(iy#6DIhlFc3}8_ZD?7Ean8Cjw
zH4jNVH#M)6!8t##B(<VM0n7m_2eFb8ix_;NG+3}WGbI%y7!0Kyz@jCINqWgS`NgRW
o&LC0&$cI=7lE_OfXYflcM+lY{<uJGcZ7Wg;4f5G+R(FmG0G;znKmY&$
delta 14
VcmX@w%+%7vw85fo^Uu07OaL(02C)DD
diff --git a/res/lang/es.bin b/res/lang/es.bin
index 845a173847f6853262c078ccd7fe82550b9f7494..395f14fb2069ed0495b0602c07e540bf7d15c0b9 100644
GIT binary patch
delta 207
zcmbQalIhkerVW-8>r;zz_0sZ_ON$xYz+?$XAS1slwFn}hkdv90%>Wh!v9ePuiy8b2
zQuC0+b5rw58JzR;N>VFI6u=y?au6#iv53JJN`nQ9GgDGQg27PQ0W4aQn537SlV6<5
o;0z)afP9FRAc?%xat6QDa)e-MQ4WJE(6%Cl&>)}9<`a{c0Sx;}bpQYW
delta 14
Wcmcb$ifQIbrVW-8H~*TLzzhI3MF!>o
diff --git a/res/lang/es_MX.bin b/res/lang/es_MX.bin
index a89c6e885ec4eb4ea04fb723880a915e7ad90686..7faaa660491bd9e9ad7ca0d368493d0007d3b8d2 100644
GIT binary patch
delta 191
zcmaFZ!?dW6X~V?kqZLay|nz~(qaZTFj)c;$jC2CErJLr<YeY$Gk
@wtnAdvVg~<$
z)I22d+|;~M2Iu^|lGKV41uzG!9K=dWEMoA5(qO^j%#>7+U@(+s0f|ly3=&lbOP3@j
j>E)%CGx(JD)LLdrOOQ7+is-7b%1W`E2fQzQhCond3!|
delta 14
VcmZ3~$Mmp=X~V?k%|R^}m;f{D2EhOT
diff --git a/res/lang/eu.bin b/res/lang/eu.bin
index 6a4aebfc6a46c82076372b8038726491ef0d85e0..8b27e451bf405efdf10bd104b6f60d9db575c021 100644
GIT binary patch
delta 207
zcmZ3xl<D0vrVZKs^{GX<dTIH|rNs<xV6p@xkda@OS_BbL$jQvhW&n$VSlOwS#SH!h
zsd-4^xv6=j49@v^C8-r93SbUcIf#{%Sj6B9rNM&5nJK9t!C)xu02VDtOwvov$uCZ2
oa0ZbIKt9AukVIZ;IfGwnIYO|sD2KrnXj_p&Xpqn5%zhVU08G0|*8l(j
delta 14
WcmaF2jAvsrVZKsn{_5QF#
ZKxCTi8
diff --git a/res/lang/fi.bin b/res/lang/fi.bin
index 05a48ac9605257582da720f7d7da2fc7eb3d5d84..3f1b14f0b5ff695c4d94cdc48b984e40f0e793eb 100644
GIT binary patch
delta 207
zcmaF0fNAw2rVUxW^{GX<dTIH|rNs<xV6p@xkda@OS_BbL$jQvhW&n$VSlOwS#SH!h
zsd-4^xv6=j49@v^C8-r93SbUcIf#{%Sj6B9rNM&5nJK9t!C)xu02VDtOwvov$uCZ2
oa0ZbIKt9AukVIZ;IfGwnIYO|sD2KrnXj_p&Xpqn5j9w;Y06vsTfB*mh
delta 13
UcmZ3zi0Rb=rVUxWi?#ch0WEh0;s5{u
diff --git a/res/lang/fr.bin b/res/lang/fr.bin
index e770bade474e6907bc9e5ae01e00e4dcca05a4fe..26241003780776639ac0ebc0ef101e8f72d30453 100644
GIT binary patch
delta 216
zcmcb(o@vrXrVUY3>Qjqy_0sZ_ON$xYz+?$XAS1slwFn}hkdv90%>Wh!v9ePuiy8b2
zQuC0+b5rw58JzR;N>VFI6u=y?au6#iv53JJN`nQ9GgDGQg27PQ6)akkn537SlV6<5
y;0z)afP9FRAc?%xat6QDa)e-MQ4WJE(6%Cl&>$a%lKlLf$^4T<Hy2HbX9fV)lTF<K
delta 22
ecmbQVk?G=krVUY3nDg^<Ci71c-E2HHo*4jc;t1IQ
diff --git a/res/lang/gl.bin b/res/lang/gl.bin
index 65e28044d272a1f5b4386aabbf3212073e1c6c4d..018f86411da900e539e723632215e58205191ca7 100644
GIT binary patch
delta 207
zcmew`pK0SlrVVR*>Qjqy_0sZ_ON$xYz+?$XAS1slwFn}hkdv90%>Wh!v9ePuiy8b2
zQuC0+b5rw58JzR;N>VFI6u=y?au6#iv53JJN`nQ9GgDGQg27PQ0W4aQn537SlV6<5
o;0z)afP9FRAc?%xat6QDa)e-MQ4WJE(6%Cl&>)}9t9x9T0eihmQ2+n{
delta 14
WcmdnEkm<vGrVVR*Hs|#^GXnrOg9gI@
diff --git a/res/lang/hu.bin b/res/lang/hu.bin
index 35bb3d0d24e0888f8903ae9af2ddc02abc4cf36f..c368d0faa3bdffc1fb2897d86e8b09a38a23f6b0 100644
GIT binary patch
delta 216
zcmdnAg6Z>0rVXwW>r;zz_0sZ_ON$xYz+?$XAS1slwFn}hkdv90%>Wh!v9ePuiy8b2
zQuC0+b5rw58JzR;N>VFI6u=y?au6#iv53JJN`nQ9GgDGQg27PQ6)akkn537SlV6<5
y;0z)afP9FRAc?%xat6QDa)e-MQ4WJE(6%Cl&>$a%lKlLf$&&rDn^PyAWdZ>16Ha6R
delta 14
Wcmeyol4;WlrVXwWH?vK8%LD*6KL)!1
diff --git a/res/lang/ia.bin b/res/lang/ia.bin
index df40df5ef6ea88126e20ac4029050f3b6dab5774..764728a6bea7f1c1a389c019be9302549b0e0b9c 100644
GIT binary patch
delta 207
zcmaDdk7?-wrVTAU^{GX<dTIH|rNs<xV6p@xkda@OS_BbL$jQvhW&n$VSlOwS#SH!h
zsd-4^xv6=j49@v^C8-r93SbUcIf#{%Sj6B9rNM&5nJK9t!C)xu02VDtOwvov$uCZ2
oa0ZbIKt9AukVIZ;IfGwnIYO|sD2KrnXj_p&Xpqn5rk+Pk07q?0fdBvi
delta 14
WcmZ3wfa%FRrVTAUn_YV!FaZEHwg&S6
diff --git a/res/lang/ie.bin b/res/lang/ie.bin
index 56fffd510a2830ca74d0068dc8e4960853f4b689..b803de9f412dc4932b615b531a73c06362c93a7f 100644
GIT binary patch
delta 207
zcmex1lWF^GrVZj<^{GX<dTIH|rNs<xV6p@xkda@OS_BbL$jQvhW&n$VSlOwS#SH!h
zsd-4^xv6=j49@v^C8-r93SbUcIf#{%Sj6B9rNM&5nJK9t!C)xu02VDtOwvov$uCZ2
oa0ZbIKt9AukVIZ;IfGwnIYO|sD2KrnXj_p&Xpqll(XNL~00ZPoyZ`_I
delta 14
Wcmdl!o9Ww3rVZj<n{Ra8X955=KL;%U
diff --git a/res/lang/isv.bin b/res/lang/isv.bin
index 44ab74aa6e42374b3f2ff2a9249e2e872315d03f..4a223ab5a9010fc03c7141b47b76a9c97c657328 100644
GIT binary patch
delta 207
zcmZ4cm+{>{#tqM_>r;zz_0sZ_ON$xYz+?$XAS1slwFn}hkdv90%>Wh!v9ePuiy8b2
zQuC0+b5rw58JzR;N>VFI6u=y?au6#iv53JJN`nQ9GgDGQg27PQ0W4aQn537SlV6<5
p;0z)afP9FRAc?%xat6QDa)e-MQ4WJE(6%Cl&>)}9PpeNb0RSu7OxOSb
delta 14
WcmaF&k8$l^#tqM_H?OEU#smOEG6+fl
diff --git a/res/lang/it.bin b/res/lang/it.bin
index aafc26ba2f9a5467f76821ff7125b749dfddae24..ed8d0f7712058abb877ff51ad1688f380f32d32b 100644
GIT binary patch
delta 207
zcmaF9glWYxrVZ}>^{GX<dTIH|rNs<xV6p@xkda@OS_BbL$jQvhW&n$VSlOwS#SH!h
zsd-4^xv6=j49@v^C8-r93SbUcIf#{%Sj6B9rNM&5nJK9t!C)xu02VDtOwvov$uCZ2
oa0ZbIKt9AukVIZ;IfGwnIYO|sD2KrnXj_p&Xpqll*M22t045hoU;qFB
delta 14
WcmZ3njOqCjrVZ}>n>i*ZFarQGhy~IB
diff --git a/res/lang/ja.bin b/res/lang/ja.bin
index 324318b3915f1961a4d742c5d4c56b761559183e..39bedf71839d2a9b804356d1d8e4b399da6b4ebb 100644
GIT binary patch
delta 207
zcmX^6kFl?TX+v90eQHszURr)~X)%Kvm@EMaWaO8n7C{6Qax(L>8Ni|-R(5J-F@t|W
zY95k!ZfagBgL8gfNoqxj0+<6<4q_!G7BTojX|P~%W=bkZFc?ZZfJI9Zlk}2v@{3a$
ooI#`lkPopEB$1a|&fu3?ju0#@%3*K?+E%0x8sxLNrRF3P07_X)T>t<8
delta 14
VcmeBcU^@GcaYI|pX7}3TOaL_E2G0Nh
diff --git a/res/lang/nl.bin b/res/lang/nl.bin
index ed6507ca3c9b40521853b3995aeaca09c0d0f9c8..3b6718b366ac4bfcfc5ba21bb274905e3a1d8d0d 100644
GIT binary patch
delta 207
zcmX>zjj4AA(}s|aqZLay|nz~(qaZTFj)c;$jC2CErJLr<YeY$Gk
@wtnAdvVg~<$
z)I22d+|;~M2Iu^|lGKV41uzG!9K=dWEMoA5(qO^j%#>7+U@(++0E?C+Cg~;T<QJzh
oID<$9ARl5SNFpz_oWU=(93fal8Z(w5>=XG{|RjP{%JO0P5CC@c;k-
delta 14
VcmeC3!E|OC(}s|a&7z$@m;f-M24esK
diff --git a/res/lang/pl.bin b/res/lang/pl.bin
index 0323b8f15d8e7a27ae29221fcbb0ed1dbd679e2c..2ea179ba5de6a346558dd4c266f3b7a86068ee66 100644
GIT binary patch
delta 216
zcmbQYi0S@frVT88^{GX<dTIH|rNs<xV6p@xkda@OS_BbL$jQvhW&n$VSlOwS#SH!h
zsd-4^xv6=j49@v^C8-r93SbUcIf#{%Sj6B9rNM&5nJK9t!C)xu3KlI%Owvov$uCZ2
xa0ZbIKt9AukVIZ;IfGwnIYO|sD2KrnXj_p&Xpj#>Nq&CL<b~ZLo2C1hnE{M8O;G><
delta 22
ecmcb=m}%Z3rVT88%=!5_lNWZ2Y`)XS%nSf<c?nDa
diff --git a/res/lang/ru.bin b/res/lang/ru.bin
index a0775e00b970d7cfbf5bb6a2f9e3d6430d94c375..a7725824a9e57534234f69493b933117f88011a1 100644
GIT binary patch
delta 207
zcmeymm3iBC<_&t+>Qjqy_0sZ_ON$xYz+?$XAS1slwFn}hkdv90%>Wh!v9ePuiy8b2
zQuC0+b5rw58JzR;N>VFI6u=y?au6#iv53JJN`nQ9GgDGQg27PQ0W4aQn537SlV6<5
p;0z)afP9FRAc?%xat6QDa)e-MQ4WJE(6%Cl&>)}9I@eCJ004fvOQZk*
delta 14
WcmdnCo%!ol<_&t+How1ioCN?pItUd2
diff --git a/res/lang/sk.bin b/res/lang/sk.bin
index 110410746fe31bcdcd8c1e8fa4540db166ada860..6414aec76ab06e8e82f80a9b38be2efdc849eba8 100644
GIT binary patch
delta 207
zcmX^7pRuKpX~UnIqZLay|nz~(qaZTFj)c;$jC2CErJLr<YeY$Gk
@wtnAdvVg~<$
z)I22d+|;~M2Iu^|lGKV41uzG!9K=dWEMoA5(qO^j%#>7+U@(++0E?C+Cg~;T<QJzh
oID<$9ARl5SNFpz_oWU=(93fal8Z(w5>=XG{|T3ubPug0GaGeHvj+t
delta 14
WcmZo^WIFtxal@aQ&3kK)GXVfO5eKON
diff --git a/res/lang/sr.bin b/res/lang/sr.bin
index 4bdc4370c4192af062b293cedd826d10182a0c53..8d20693351897d4b415dddddb3a8d6934ccf7303 100644
GIT binary patch
delta 207
zcmZ3wg!$Q0<_&sh>r;zz_0sZ_ON$xYz+?$XAS1slwFn}hkdv90%>Wh!v9ePuiy8b2
zQuC0+b5rw58JzR;N>VFI6u=y?au6#iv53JJN`nQ9GgDGQg27PQ0W4aQn537SlV6<5
p;0z)afP9FRAc?%xat6QDa)e-MQ4WJE(6%Cl&>)}9I%j{f002RpOMd_W
delta 14
WcmaF1lzHhA<_&shH@`poodp0n<p=Np
diff --git a/res/lang/tok.bin b/res/lang/tok.bin
index 44647694b70429f9c6ab40c2ae9d6bc19c3b8d56..8b500280c5b568872408568d5293e3ca3f861ae8 100644
GIT binary patch
delta 207
zcmccJ$24aG(}s&J^{GX<dTIH|rNs<xV6p@xkda@OS_BbL$jQvhW&n$VSlOwS#SH!h
zsd-4^xv6=j49@v^C8-r93SbUcIf#{%Sj6B9rNM&5nJK9t!C)xu02VDtOwvov$uCZ2
oa0ZbIKt9AukVIZ;IfGwnIYO|sD2KrnXj_p&Xpqn5^DRA009DFMg8%>k
delta 14
WcmbO;f$4T1(}s&Jn<uq)F#!NIzy|dI
diff --git a/res/lang/tr.bin b/res/lang/tr.bin
index c9a524497c256aa37c2951a12b6fbf67049e0310..34e690871f15cec657edfae436ece8213aa39724 100644
GIT binary patch
delta 207
zcmdnKjOoX6rVX+a>Qjqy_0sZ_ON$xYz+?$XAS1slwFn}hkdv90%>Wh!v9ePuiy8b2
zQuC0+b5rw58JzR;N>VFI6u=y?au6#iv53JJN`nQ9GgDGQg27PQ0W4aQn537SlV6<5
o;0z)afP9FRAc?%xat6QDa)e-MQ4WJE(6%Cl&>)}9(i3Eu0U)$WD*ylh
delta 14
WcmeydoN4<qrVX+aHs6~d#S8#9B?g=T
diff --git a/res/lang/uk.bin b/res/lang/uk.bin
index 21504e85db9fb5e8e1a9a487a9be87a1d92fd4b4..b58b82dda4b3c521a01f807e2350fca610c6e8df 100644
GIT binary patch
delta 207
zcmdnIj`=a<-HU)u$Ha>ZRo;mliX)fyok(Kt_I9Y7s<0Aty60n*l5eVr8dR7Bl!4
zq~;-s=ceYBGC1ewm84dbD1bR&<sep4ViAKclm-hHXQrfr1cRZp16Z^qF-b2uC%-tA
p!5Ks<0QnFrK@xeX<qUqQ<p{yjq8tWSplwA8p+P>I_gpGx0RY{;OjiH^
delta 14
Wcmeyeo_X^+<_-HUZLYsu$^rmAg$Kz1
diff --git a/res/lang/zh_Hans.bin b/res/lang/zh_Hans.bin
index e278e641c56b36efb03c7ec0e799b5c1e9a410c2..be83359fc89968f1114344e9649bbd318c78e351 100644
GIT binary patch
delta 207
zcmbRFhw;{5#tlK$^{GX<dTIH|rNs<xV6p@xkda@OS_BbL$jQvhW&n$VSlOwS#SH!h
zsd-4^xv6=j49@v^C8-r93SbUcIf#{%Sj6B9rNM&5nJK9t!C)xu02VDtOwvov$uCZ2
oa0ZbIKt9AukVIZ;IfGwnIYO|sD2KrnXj_p&Xpqn5fa;S>0Fzuxg#Z8m
delta 14
WcmcchmvQDF#tlK$n}utRGXVfP!Up#M
diff --git a/res/lang/zh_Hant.bin b/res/lang/zh_Hant.bin
index fbb3302729493e9322f9006fc9021d8f0d0e8b65..83010daa5fedbc37b034067aff10e9b3887200e6 100644
GIT binary patch
delta 207
zcmaF*k8xQ8(}p88^{GX<dTIH|rNs<xV6p@xkda@OS_BbL$jQvhW&n$VSlOwS#SH!h
zsd-4^xv6=j49@v^C8-r93SbUcIf#{%Sj6B9rNM&5nJK9t!C)xu02VDtOwvov$uCZ2
oa0ZbIKt9AukVIZ;IfGwnIYO|sD2KrnXj_p&Xpqn5Lp6(;0HOU$;{X5v
delta 14
WcmZ41!1VMV<Ax(On_FuaG64WNm<Lq=
diff --git a/src/app.c b/src/app.c
index a5e417d2..c4b07d44 100644
--- a/src/app.c
+++ b/src/app.c
@@ -2784,7 +2784,7 @@ iBool moveFocusInsideMenu_App(const void *sdlEvent) {
}
return iTrue;
}
else {
else if (menu) {
setCurrent_Window(window_Widget(focus_Widget()));
postCommand_Widget(focus_Widget(), "cancel");
}
diff --git a/src/defs.h b/src/defs.h
index bc5e0b95..3746acb0 100644
--- a/src/defs.h
+++ b/src/defs.h
@@ -332,6 +332,10 @@ iLocalDef int acceptKeyMod_ReturnKeyBehavior(int behavior) {
#endif
+#if defined (iPlatformDesktop) && !defined (iPlatformTerminal)
+# define LAGRANGE_MULTIPLE_WINDOWS
+#endif
/* UI labels that depend on the platform */
#if defined (iPlatformMobile)
diff --git a/src/ui/certlistwidget.c b/src/ui/certlistwidget.c
index 9da7fe6a..dbaefeb1 100644
--- a/src/ui/certlistwidget.c
+++ b/src/ui/certlistwidget.c
@@ -120,7 +120,7 @@ static void updateContextMenu_CertListWidget_(iCertListWidget *d) {
insert_Array(items, insertPos++, &(iMenuItem){ "---", 0, 0, NULL });
}
iBool usedOnCurrentPage = iFalse;
iConstForEach(StringSet, i, ident->useUrls) {
iConstForEach(StringSet, i, ident->useUrls) {
const iString *url = i.value;
usedOnCurrentPage |= startsWithCase_String(docUrl, cstr_String(url));
iRangecc urlStr = range_String(url);
@@ -141,8 +141,8 @@ static void updateContextMenu_CertListWidget_(iCertListWidget *d) {
remove_Array(items, firstIndex);
}
}
}
static void itemClicked_CertListWidget_(iCertListWidget *d, iCertItem *item, size_t itemIndex) {
@@ -180,7 +180,7 @@ static iBool processEvent_CertListWidget_(iCertListWidget *d, const SDL_Event *e
return iTrue;
}
else if (isCommand_Widget(w, ev, "ident.use")) {
iGmIdentity *ident = menuIdentity_CertListWidget_(d);
iGmIdentity *ident = menuIdentity_CertListWidget_(d);
const iString *tabUrl = urlQueryStripped_String(url_DocumentWidget(document_App()));
if (ident) {
if (argLabel_Command(cmd, "clear")) {
@@ -217,7 +217,16 @@ static iBool processEvent_CertListWidget_(iCertListWidget *d, const SDL_Event *e
if (ident) {
const iString *fps = collect_String(
hexEncode_Block(collect_Block(fingerprint_TlsCertificate(ident->cert))));
SDL_SetClipboardText(cstr_String(fps));
if (isTerminal_Platform()) {
makeMessage_Widget(
"${ident.fingerprint}",
cstr_String(fps),
(iMenuItem[]){ { "${dlg.message.ok}", SDLK_RETURN, 0, "message.ok" } },
1);
}
else {
SDL_SetClipboardText(cstr_String(fps));
}
}
return iTrue;
}
@@ -303,7 +312,7 @@ static iBool processEvent_CertListWidget_(iCertListWidget *d, const SDL_Event *e
invalidateItem_ListWidget(&d->list, d->contextIndex);
}
d->contextIndex = hoverItemIndex_ListWidget(&d->list);
updateContextMenu_CertListWidget_(d);
updateContextMenu_CertListWidget_(d);
/* TODO: Some callback-based mechanism would be nice for updating menus right
before they open? At least move these to `updateContextMenu_ */
const iGmIdentity *ident = constHoverIdentity_CertListWidget(d);
@@ -365,7 +374,7 @@ static void draw_CertItem_(const iCertItem *d, iPaint *p, iRect itemRect,
bg = uiBackgroundUnfocusedSelection_ColorId;
fillRect_Paint(p, itemRect, bg);
}
-// iInt2 pos = itemRect.pos;
+// iInt2 pos = itemRect.pos;
const int fg = isHover ? (isPressing ? uiTextPressed_ColorId : uiTextFramelessHover_ColorId)
: uiTextStrong_ColorId;
const iBool isUsedOnDomain = (d->indent != 0);
diff --git a/src/ui/documentwidget.c b/src/ui/documentwidget.c
index d48a2fcd..1a547fa7 100644
--- a/src/ui/documentwidget.c
+++ b/src/ui/documentwidget.c
@@ -3154,7 +3154,17 @@ static iBool handleCommand_DocumentWidget_(iDocumentWidget *d, const char *cmd)
else if (equal_Command(cmd, "server.copycert") && document_App() == d) {
const iString *fp = collect_String(
hexEncode_Block(arg_Command(cmd) ? d->certFullFingerprint : d->certFingerprint));
SDL_SetClipboardText(cstr_String(fp));
if (isTerminal_Platform()) {
makeMessage_Widget(
arg_Command(cmd) ? "${dlg.cert.fingerprint.full}"
: "${dlg.cert.fingerprint.pubkey}",
cstr_String(fp),
(iMenuItem[]){ { "${dlg.message.ok}", SDLK_RETURN, 0, "message.ok" } },
1);
}
else {
SDL_SetClipboardText(cstr_String(fp));
}
return iTrue;
}
else if (equal_Command(cmd, "copy") && document_App() == d && !focus_Widget()) {
diff --git a/src/ui/inputwidget.c b/src/ui/inputwidget.c
index 66201119..355486de 100644
--- a/src/ui/inputwidget.c
+++ b/src/ui/inputwidget.c
@@ -396,7 +396,7 @@ static iRect contentBounds_InputWidget_(const iInputWidget *d) {
iRect bounds = adjusted_Rect(bounds_Widget(w),
addX_I2(padding_(), d->leftPadding),
neg_I2(addX_I2(padding_(), d->rightPadding)));
bounds.pos.y += padding_().y / 2;
if (flags_Widget(w) & extraPadding_WidgetFlag) {
if (d->sysCtrl && !cmp_String(id_Widget(w), "url")) {
diff --git a/src/ui/root.c b/src/ui/root.c
index ddba9aa2..22289366 100644
--- a/src/ui/root.c
+++ b/src/ui/root.c
@@ -415,6 +415,64 @@ static iBool isBookmarkFolder_(void *context, const iBookmark *bm) {
return isFolder_Bookmark(bm);
}
+static size_t visibleSize_String(const iString *d) {
if (i.value == '\v') {
next_StringConstIterator(&i); /* skip escape */
continue;
}
n += width_Char(i.value);
+}
+static void formatShortcut_(iString *d, int maxLen, const char *label, int key, int mods) {
appendCStr_String(&str, " ");
"%s%s%s %s",
escape_Color(uiTextShortcut_ColorId),
cstr_String(&keyStr),
uiText_ColorEscape,
label);
append_String(d, &str);
+}
+static void updateTerminalStatus_(iLabelWidget *term) {
+}
iBool handleRootCommands_Widget(iWidget *root, const char *cmd) {
iUnused(root);
if (equal_Command(cmd, "menu.open")) {
@@ -527,9 +585,26 @@ iBool handleRootCommands_Widget(iWidget *root, const char *cmd) {
if (menubar) {
setFocus_Widget(child_Widget(menubar, prefs_App()->recentMenuBarIndex));
postCommand_Widget(focus_Widget(), "trigger");
if (isTerminal_Platform()) {
setFlags_Widget(findChild_Widget(root, "termstatus"), hidden_WidgetFlag, iTrue);
}
}
return iTrue;
}
if (!cmp_String(id_Widget(parent_Widget(focus_Widget())), "menubar")) {
setFlags_Widget(findChild_Widget(root, "termstatus"), hidden_WidgetFlag, iTrue);
}
return iFalse;
if (!focus_Widget()) {
iLabelWidget *status = findChild_Widget(root, "termstatus");
setFlags_Widget(as_Widget(status), hidden_WidgetFlag, iFalse);
updateTerminalStatus_(status);
}
return iFalse;
else if (equal_Command(cmd, "input.resized")) {
/* No parent handled this, so do a full rearrangement. */
/* TODO: Defer this and do a single rearrangement later. */
@@ -591,6 +666,9 @@ iBool handleRootCommands_Widget(iWidget *root, const char *cmd) {
return iTrue;
}
else if (equal_Command(cmd, "window.resized")) {
if (isTerminal_Platform()) {
updateTerminalStatus_(findWidget_Root("termstatus"));
}
iSidebarWidget *sidebar = findChild_Widget(root, "sidebar");
iSidebarWidget *sidebar2 = findChild_Widget(root, "sidebar2");
if (deviceType_App() != phone_AppDeviceType) {
@@ -889,7 +967,7 @@ static void updateUrlInputContentPadding_(iWidget *navBar) {
const int indicatorsWidth = width_Widget(findChild_Widget(navBar, "url.rightembed"));
/* The indicators widget has a padding that covers the urlButtons area. */
setContentPadding_InputWidget(url,
lockWidth - 2 * gap_UI, // * 0.75f,
isTerminal_Platform() ? lockWidth : (lockWidth - 2 * gap_UI),
indicatorsWidth);
}
@@ -1490,6 +1568,8 @@ void updateMetrics_Root(iRoot *d) {
setFixedSize_Widget(appIcon, init_I2(appIconSize_Root(), appMin->rect.size.y));
}
iWidget *navBar = findChild_Widget(d->widget, "navbar");
iWidget *url = findChild_Widget(d->widget, "url");
iWidget *rightEmbed = findChild_Widget(navBar, "url.rightembed");
iWidget *embedPad = findChild_Widget(navBar, "url.embedpad");
@@ -1505,6 +1585,9 @@ void updateMetrics_Root(iRoot *d) {
if (navBar) {
updateUrlInputContentPadding_(navBar);
}
setFixedSize_Widget(menuBar, menuBar->rect.size);
if (idName) {
setFixedSize_Widget(as_Widget(idName),
init_I2(-1, 2 * gap_UI + lineHeight_Text(uiLabelTiny_FontId)));
@@ -1534,8 +1617,9 @@ static iBool updateWindowMenu_(iWidget *menuBarItem, const char *cmd) {
/* Remove the old dynamic window list items first. See `windowMenuItems_` in window.c
for the fixed list. */
iWidget *menu = findChild_Widget(menuBarItem, "menu");
while (childCount_Widget(menu) > 9) {
destroy_Widget(removeChild_Widget(menu, child_Widget(menu, 9)));
const size_t numFixedItems = numWindowMenuItems_Window() + 1;
while (childCount_Widget(menu) > numFixedItems) {
destroy_Widget(removeChild_Widget(menu, child_Widget(menu, numFixedItems)));
}
iArray winItems;
init_Array(&winItems, sizeof(iMenuItem));
@@ -1736,16 +1820,19 @@ void createUserInterface_Root(iRoot *d) {
/* TODO: Use Widget's `updateMenuItems` callback. */
setCommandHandler_Widget(child_Widget(menuBar, 5), updateWindowMenu_);
setId_Widget(menuBar, "menubar");
-# if 0
addChildFlags_Widget(menuBar, iClob(new_Widget()), expand_WidgetFlag);
/* It's nice to use this space for something, but it should be more valuable than
just the app version... */
iLabelWidget *ver = addChildFlags_Widget(menuBar, iClob(new_LabelWidget(LAGRANGE_APP_VERSION, NULL)),
frameless_WidgetFlag);
setTextColor_LabelWidget(ver, uiAnnotation_ColorId);
-# endif
}
#endif
iWidget *termStatus =
addChildFlags_Widget(div,
iClob(new_LabelWidget("", NULL)),
fixedPosition_WidgetFlag | fixedHeight_WidgetFlag |
resizeToParentWidth_WidgetFlag);
setBackgroundColor_Widget(termStatus, uiBackground_ColorId);
updateTerminalStatus_((iLabelWidget *) termStatus);
setId_Widget(termStatus, "termstatus");
iWidget *navBar;
/* Navigation bar. */ {
navBar = new_Widget();
diff --git a/src/ui/util.c b/src/ui/util.c
index 4c2c3bf8..3cacc019 100644
--- a/src/ui/util.c
+++ b/src/ui/util.c
@@ -2783,10 +2783,14 @@ static iBool messageHandler_(iWidget *msg, const char *cmd) {
equal_Command(cmd, "theme.changed") ||
equal_Command(cmd, "focus.lost") ||
equal_Command(cmd, "focus.gained") ||
equal_Command(cmd, "menu.open") ||
equal_Command(cmd, "menu.opened") ||
equal_Command(cmd, "menu.closed") ||
startsWith_CStr(cmd, "cancel menu:") ||
startsWith_CStr(cmd, "feeds.update.") ||
startsWith_CStr(cmd, "window."))) {
//printf("message dismissed by: %s\n", cmd); fflush(stdout);
// printf("message dismissed by: %s\n", cmd); fflush(stdout);
// SDL_Delay(5000);
setupSheetTransition_Mobile(msg, dialogTransitionDir_Widget(msg));
destroy_Widget(msg);
}
@@ -3994,6 +3998,9 @@ const iArray *makeBookmarkFolderActions_MenuItem(const char *command, iBool with
}
void enableResizing_Widget(iWidget *d, int minWidth, const char *resizeId) {
return; /* cannot grab edges */
if (deviceType_App() == desktop_AppDeviceType) {
iChangeFlags(d->flags, arrangeWidth_WidgetFlag, iFalse);
d->flags2 |= horizontallyResizable_WidgetFlag2;
@@ -4138,7 +4145,7 @@ iWidget *makeBookmarkEditor_Widget(uint32_t folderId, iBool withDup) {
addDialogToggle_(headings, values, "${bookmark.tag.linksplit}:", "bmed.tag.linksplit");
}
arrange_Widget(dlg);
const int inputWidth = 100 * gap_UI - headings->rect.size.x;
const int inputWidth = iMin(100 * gap_UI, width_Rect(rect_Root(dlg->root))) - headings->rect.size.x;
for (int i = 0; i < 4; ++i) {
if (inputs[i]) {
as_Widget(inputs[i])->rect.size.x = inputWidth;
--
2.25.1
text/plain
This content has been proxied by September (ba2dc).