diff --git a/docs/wayland-interact-bold.png b/docs/wayland-interact-bold.png new file mode 100644 index 0000000000000000000000000000000000000000..3259f4ef8d0bd83c80711fa9531b5b08580d0deb GIT binary patch literal 4725 zcmeAS@N?(olHy`uVBq!ia0y~yV9H@&U~uDL29b{~@)#Hx6p}rHd>I(3)EF2VS{N99 zF)%PRykKA`HDF+PmB7GYHG_dcykO3*KpO@IrqBSN5Z9YGZ{E0ZnV7jHhQZtgjM{eiW!Pgq>~lsQW^3@k6-escW$jZ>FyA31Y%&ylmMH}ARi=(V=7 zO>Jx6gBKr7ZQaW2J4$L=cN{p`F=1wOa?XqeE1$gidiwI6EqjhWe*MMXJ>bNJn@7)H zyKv*-^7T88ox2_!oe~n0y7S((It9GO?(3a8FFCtp*P+v1LD2~rg?VN5*X}((c=FQ9jk^LO5>0Ge>)QI) zY}xDP7rtV{&ds}z%v`ui)6h!C#I|$dtVy#LxAje*yL8>1CvP9V{IqV{eoIF$|L}y$ z#x6(CpqiH6MXNTSxpLRlH>|O9QvdV?t-aGS3#*#CCNEgA@$l&@+x8tlbn5cnqvs+L zGB4eFJb(FyjDpIzwEWoAysLMg<(D^1p1tJWv-i6XpHbJhh)Kzvy?9MS$HZy#map2h zd(M)zSw+=pdF2aNZVHdjsA%Y1x^`Q0_ml}U7GA&qqNu8Q-?8&KCABR*Q_sd#nK3Xh zFeZ7syRapu?Wkp7;9unF;uunK>+S5{@xks=$97-eXA{OMc!bMkVFjnt)TV>dh0TjP zrgW`Y6cF%4t!W{L2IJCOPD`gf2s@H?_2{~3UfH>kd-AsK+IDw;cKSI>V@uBI30t2( zUiSG9!^xSI>GzDESEoHw@sF!ib=d#=ul&Cs%ftWudGtlgm0@$oi>)_ByowukzKKr} z`E9IU<@B-Uh>xH|H|w+Qh1{KS>|%nh!8URHH}zFjZi#hY_nz=X-{Y9{!o|K`kzJ{$ z)pa8i{cD#^bIMAU3bgu=_TgiwgUgBtvF*Q(rWqUWO%lzK%x^uTYRsM8A#?LY!jZLe z18hulUNa>|?{_?~ZQ{Xc#+5zAm!BMOPT;QXp7B+D$=|GSt$=kgvfIucWHoNoO=Zf7 zE^<1$ha-|TTJCjrw#l^o)A!eXjozTV@55WAD)t*QOF5gVM;rM+UUb%Z>J^mIPyZ1#4sD>tP(%<{L~RF3@> zA-^tfi>TQ}!Gu~b5xz@BcFsHcTz22(F1?X8>;B~|HRY{KH9u+N!KX=o*1KxIT7;jlsZ*1gaHaXqg z&v)hNJj+YZEnVfqH~HDzP47&*nzz0D<;(g@;_{bW^S>rvH;j7ywxsN4(P<;0h@58* zKjXsWCZ4adI-c&g1>o92Z1n{+q+w$YdGS+iwp!408l z=5Fe73b(>0O7FFPd$*uzZC8Bn_KnFelI-4>1z(%+*tF)@`?I#kYkusWcSdzVL)N2* zn!94mJznw?n72-2P2@9UwF?$((pwE~+~9sIrm@oD?}_LG(@UDK z+H&Xr%J{DuCA;$KKQ8qfbH6Lr_RfAIm%Fq$Vlv-$WBwm%=52@F+!vnD`K2N8RA`&( z^%r6VI{C7^i+_l{J)pR#%VOtJ#J26tj2VTp+y1yt zSv>z!?k^#^zedL&HOxCxsef(SlzxWtGP!I0cMinfVtKQCo^O%l-3Gb(JF0)Q}G}5K%r-IT>ed;vhwP>gMzP; zLPQewwD_%AZd5kAVq?$2ZBzZ?%nvW?Zwk~)eC*|XIKj(FQDPte1?w3%S8VhsD|=mh z?VottZceiD3jAS`laOqDTTgadz4YC>?)RC-1>Vx@oF`3X_V{&N@s#`dv+X$# zS8uRCby^?Uc-=;&5?{4Ock<3`%T>H7{}+P80?{Fm1z@8)pao_#@I ztU2A%Z)W1{Rz|zcg7XWsI=Md1*gEf3&mp}osVj-E4}00?Ji7DaWl499+M#84txI!q zOm6Hl3rA!ov5iS}I94ZUaQ$gXqR6CE-)?Id$^=myb?DI1=$9yH@V@v9*= zSj0Fe>*m|q=EG&2p8sdAKm1K_wyD{S#As{h8(~V}BDFnBO$4`Hb?D@~U7>Z%-DgAS zMm45{-ERKBkIVD@`0yZlmXz5x@3V|Yk^?nvEQ;X1t#xeUZI;=yZyd2Lc`p;Fzwc4| z@|Lq2;v3$cPTCwM)tr0boOr+@`Hc^b7_R-1DUg#N?6%c*U-fFyHId&uTDf%o(8`G?KSs~?tZh;^8JTH_Z( z#j1nPm>#L*xc;?ReK^eX{^K3;X6gFQLG5cB^cTm?QQ7uW|9my`S>DM9)z0;r-Bx;7 zHY4G5dh`L!gwx0Nq)yLt<==8X;fGOGi@IT0-=W%HwdS%pZaW*^swem~=i2=Wzre6D z)ONL-ewo?k&Pct*+i$)r{g#)zAS3bHoehm=BjZw%+uw(8CLkdyXXmh(32mI;irPq*t93!eXV^KgUI+xNM%dCUs)T<@}S zUd-YAcKDlVmU5UMSF}vdx*b94Yjdw;olpF|fosEBmbC}Zzj<%_LoayOWtQ7@4?fM1 zVO<<^V47WD&y+%$(w#r`wzmH`qG@+q!?iVAy57N}b#Ag}3<6AH9wc!Z>W8L$LsQ$urHO$A3AbBr&nGG4ryNcS##0e zO;yKj)^2%{RvK^J{x&GJ^0igUd21H8&k5o2g?}~OwKmD!d37}JZF9@RSwDWfI;^>6 zDeJwUZNeHWKbX#YF#nN?iGAAn@;6>;8-98BnJxY%W?v<3VVX7PcE-Ni)5|nO>Xj0T zFLtb5xs1D_H+`#y{L$-j-;_-oQ{%726!+ZoSyweBYt4P@+|b&ngd-O6QqRxX<$t;D z+TQr>^)XF1v+r)F0xz82Iy+bK#wCk6b7Qj(AG3A1`7y)n>t)OLN`@w~&aLcSg)_RY z{aW`Xq4)m#^4*gk6t*5c^KDPjE{(g-tKOwGT{)1rIe_;~X9d^Y1NZCh?z{P*_KsEP z!xeMwtM0o^WNrTN>9APg_0mU2?Ptv2D6-AFF#KkXaqAY_+v`{QOZ(k6^AC++_{LDQ zrtaWolONt+KONq-=FZ0_8;Z+vl&YsC-sf znOJt|MuLKjvvk^xQjg_%Z$uQ%A9^O9Xr;Aj&O+UNo5XeJt7`D*+%u^= z{N>!YoDF|%SaXC|w@Bw)pQocYt@;0wZ;NdEjJ$KdeGhK2zGl$7?%Tq@?F)B(_bCff z+dp~h>1k0jE5fAec&%4$n8jtjw(y3$Soh=Xtzo>p*B2TT?t2)wS7o)N=FHvG{O&TW zU;QHdz&6c$-xnsbO#AAhAbIcJgF9#UX8g2}$Z`T3?a);~3m-jqh_UNe`+-Jw0y(KliUpVv-@3z~5Z_K(btv{#J zbE#ZD$l7Z9gDC~axh`kue9}Mf7PaiY-zn8OYpw)3^&6`2?r)O~jq)uu&z)_db2w$S zllV^`r8}!P&6*hGaQ)KC>~Fie_*in3_t|8!h<$ZgaQeeHw&!vePP^8o8O!Wn^s_wS zOb+Xc^H-(?KD=*Qv$NJdD6lom*{ZD7(}MBX8MRMUJpRA#%73Z(Y7wYE1@uoY$^IS;mZSg&N9{VwI{`s>VmlOImM9k}#rNcrVmJ%|4p z+{|LgIkZ=6m82$XneNS2TSA~eix@|Ke!x4%y%HN{%Ix1$$r-K9 zKI5?3pWSWx=BMlG4T29Wvo34(j5wsmdurv58;>s}UVeN?WZTWM?YG}PwV#u8is8fc z%hwx!?As@ISXSF-@vVS4Y118UdH&r{n%vMA^YS&LP)qR14U4^2ugqhfq!%iw7RB4* zyCdAyRC(!vbxVVh8{qH+i?LV+#|gSGaU% z<0TWV4HZ^`+cehfX}GuX>pyO_w<`{1tvam6@6G(?$p+5vt5&2f`BI{kb7y7tr(LJ` zN^bn(KVS z<>6(=Th()vZ>=wuW_TO!Xm6>p*!*XW)c;%!$#)T%Qlb$a)+^<=<(!$_8)X!0km)WO z7A$L48PRew?D@Acd((qyD8VpQ_QeL-f;VY1y_Giv`m=C>qNQ;!%K^37(>H`}u#DGR zd}n|5k0S0Df2_70H$JT9b4bW+X86myIoqT!9CPZwyjtfBpZ<+$+21 z$nCGk{l&JIrz+jq*p_+4p54=WWkauZmchHP zfBtQ@*6PqO;~=gVQC6kCap5-`H>NMP&e-?Voar?*SmbVWPwQ{+HTy5WZTVH3r~HBY z^%dI=LXu3OVeVUf&IaEZEi3u>g|;M`f0|W%xsv~8_m-Moi@2k#EuuN)HYaPc@4srC z9{k;6-?pcpYeT+7mK0vK1Sg->wKr^y7`}OEyj^0IvupC!x5fTnCKvK>9A2O3UMd-O zS@5v0Hea_v{p#Wc|NF}8L#O3-7p(8fQd-)ut~Gf2nYi$ajMY0^xBgwf+2OohCd;+g zCmjyomY!4Xpl>t(@1>90v(DdnvDN;HdECBNZ);cR3jT{dJiU7H$H1B2Uh_@9f78I> z^5KQc#B#kZe?IlmZIe6qlk#1O_p^^=h91gItIlgJ*yNXLI#=LX)Q!9<Fk;be%DT}U8Z=b zrMfiD?&izA>(0l4Bz#XAwTk9=>F+$mVWz68$vS&dYS0GFNVUPrSoWXMr|`Gnq5iP< Q3=9kmp00i_>zopr0A9~f`Tzg` literal 0 HcmV?d00001 diff --git a/docs/wayland-interact-menu.png b/docs/wayland-interact-menu.png new file mode 100644 index 0000000000000000000000000000000000000000..e1691f029f22f1219b38cef26b3873000d83c00f GIT binary patch literal 27871 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 Dka*HM literal 0 HcmV?d00001 diff --git a/docs/wayland-interact-word.png b/docs/wayland-interact-word.png new file mode 100644 index 0000000000000000000000000000000000000000..4109298434b27c1b97975860f7f31a823238aeac GIT binary patch literal 10798 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 E0PyzyjQ{`u literal 0 HcmV?d00001 diff --git a/docs/wayland-port.md b/docs/wayland-port.md index c60191af2..0a9f9315a 100644 --- a/docs/wayland-port.md +++ b/docs/wayland-port.md @@ -4527,3 +4527,61 @@ positions, 7 through 446. Nothing about spacing or item size changed, the row si the next step is on the LibreOffice side of the boundary: what does it ask us for between the second and third pass. The icons in the missing part are drawn and then dropped, which also means this is not a missing image or a failed reader. + + +## Interactive, checked headlessly at last, and what it took to make a virtual keyboard tell the truth + +2026-08-16. Keyboard and mouse have been checked before in the nested harness, which borrows a real +keyboard from the compositor it runs inside. This is the same check with NO real input device +anywhere: headless sway, a virtual pointer and a virtual keyboard, run-lo-interact.sh. + +WHAT IT DOES AND WHAT CAME BACK, all of it looked at: + + types two paragraphs both appear, correct glyphs, correct wrap, second paragraph after + a Return, and the status bar counts the words + double clicks a word the word is selected, pale blue band with the text still black, + and the status bar says Selected: 1 word, 6 characters + docs/wayland-interact-word.png + Command A then Command B the whole document is selected and then EMBOLDENED, which means the + key equivalent found the menu item and LibreOffice acted on it + docs/wayland-interact-bold.png + clicks the menu bar the application menu opens with its shortcut glyphs, its separator, + its submenu chevron and its shadow + docs/wayland-interact-menu.png + +THE SHORTCUT PATH IS WHOLE, and it was worth proving because it has four places to fail silently. +CIDER_TRACE_KEYEQ prints the event as NSApplication sees it, then every menu it walks and every item +carrying a key equivalent with its modifiers and its enabled state. For Command B it prints + + CIDER_KEYEQ sendEvent chars=b mods=0x100000 keyWindow=yes mainMenu=yes + CIDER_KEYEQ item=Bold key=b mods=0x100000 enabled=1 action=menuItemTriggered: + +and then STOPS WALKING, which is how you know the item matched and the action was sent rather than +falling through to the next menu. The whole chain is ours: xkb reports Mod4, the modifiers become +NSCommandKeyMask, the key event carries them, NSApplication sends it to the main menu first, the +menu matches on charactersIgnoringModifiers, and LibreOffice does the rest. + +FOUR HARNESS TRAPS, all of them capable of looking exactly like a broken keyboard. + + ONE DEVICE FOR THE WHOLE TEST. wtype makes a virtual keyboard, does what its arguments say and + destroys it. A client is told a keyboard exists only when the device appears, and binding one, + receiving the keymap and being given focus is a round trip through the application main loop. + Seventy characters sent as four short invocations arrived as nine, and a Command B sent on its + own never arrived at all. Everything the keyboard does now goes in ONE invocation. + + A KEEP ALIVE DEVICE IS WORSE THAN NONE. Holding a second keyboard open does keep the capability + up, but wl_keyboard is per SEAT: the keep alive modifiers event lands on the same seat and + clears the Command the other device is holding. Command F opened nothing while a shift was + being pressed every two seconds beside it. + + -d IS THE DELAY BETWEEN KEYSTROKES AND -s IS A ONE SHOT SLEEP. Typing with -s 60 does not pace + anything, it sleeps once. The pauses that let the mouse steps run beside the keyboard script + are -s, and they are what makes one process able to drive both. + + THE POINTER MUST OUTLIVE THE GESTURE, which vptr/cider-vptr already existed for. A click sent + through wlrctl or sway IPC creates a device that is gone before the application has bound a + wl_pointer to it. + +WHAT IS NOT PROVEN HERE. Command F was sent in an earlier pass and the find bar was not in the shot, +but the shot and the Escape that closes it were half a second apart, so that is a harness timing +question and not a finding. Drag and drop is still untested. diff --git a/vendor/pins/cocotron/AppKit/NSApplication.m b/vendor/pins/cocotron/AppKit/NSApplication.m index 2872a316e..b1f5ea82c 100644 --- a/vendor/pins/cocotron/AppKit/NSApplication.m +++ b/vendor/pins/cocotron/AppKit/NSApplication.m @@ -829,6 +829,12 @@ static void cider_ensure_finish_launching(NSApplication *self) if ([event type] == NSKeyDown) { unsigned modifierFlags = [event modifierFlags]; + if (getenv("CIDER_TRACE_KEYEQ") != NULL) { + fprintf(stderr, "CIDER_KEYEQ sendEvent chars=%s mods=%#x keyWindow=%s mainMenu=%s\n", + [[event charactersIgnoringModifiers] UTF8String] ?: "(none)", modifierFlags, + [self keyWindow] != nil ? "yes" : "no", + [self mainMenu] != nil ? "yes" : "no"); + } if (modifierFlags & (NSCommandKeyMask | NSAlternateKeyMask)) if ([self _performKeyEquivalent: event]) return; diff --git a/vendor/pins/cocotron/AppKit/NSMenu.subproj/NSMenu.m b/vendor/pins/cocotron/AppKit/NSMenu.subproj/NSMenu.m index aab757846..b73dff0d0 100644 --- a/vendor/pins/cocotron/AppKit/NSMenu.subproj/NSMenu.m +++ b/vendor/pins/cocotron/AppKit/NSMenu.subproj/NSMenu.m @@ -20,6 +20,8 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ #import #import #import +#include +#include #import #import #import @@ -517,12 +519,33 @@ BOOL itemIsEnabled(NSMenuItem *item) { if (_autoenablesItems) [self update]; + /* + * CIDER_TRACE_KEYEQ names what a shortcut was matched against. A key equivalent that does + * nothing has four possible reasons and they are indistinguishable from outside: the menu is + * not reached at all, the item is not there, the modifiers do not match, or the item is there + * and disabled. This prints the event once per menu and then every item that carries a key. + */ + BOOL trace = getenv("CIDER_TRACE_KEYEQ") != NULL; + + if (trace) { + fprintf(stderr, "CIDER_KEYEQ menu=%s items=%ld chars=%s mods=%#x\n", + [[self title] UTF8String] ?: "(none)", (long) count, + [characters UTF8String] ?: "(none)", modifiers); + } + for (i = 0; i < count; i++) { NSMenuItem *item = [_itemArray objectAtIndex: i]; unsigned itemModifiers = [item keyEquivalentModifierMask] & (NSCommandKeyMask | NSAlternateKeyMask); NSString *key = [item keyEquivalent]; + if (trace && [key length] > 0) { + fprintf(stderr, "CIDER_KEYEQ item=%s key=%s mods=%#x enabled=%d action=%s\n", + [[item title] UTF8String] ?: "(none)", [key UTF8String] ?: "(none)", + itemModifiers, itemIsEnabled(item) ? 1 : 0, + [item action] != NULL ? sel_getName([item action]) : "(none)"); + } + if ((modifiers & (NSCommandKeyMask | NSAlternateKeyMask)) == itemModifiers) {