From cc5ea984b0b4af861884ce1da1a10b79e79d6290 Mon Sep 17 00:00:00 2001 From: nakst <> Date: Sat, 18 Sep 2021 09:10:06 +0100 Subject: [PATCH] ui fixes --- desktop/gui.cpp | 77 ++++++++++++++++++++++++++---------------- desktop/list_view.cpp | 5 +++ desktop/text.cpp | 5 +++ res/Theme Source.dat | Bin 52743 -> 52816 bytes res/Themes/Theme.dat | Bin 53880 -> 53868 bytes 5 files changed, 58 insertions(+), 29 deletions(-) diff --git a/desktop/gui.cpp b/desktop/gui.cpp index 5be98a0..2bbcfb4 100644 --- a/desktop/gui.cpp +++ b/desktop/gui.cpp @@ -2707,6 +2707,8 @@ EsScrollbar *ScrollbarCreate(EsElement *parent, uint64_t flags) { } } else if (message->type == ES_MSG_MOUSE_LEFT_DOWN) { scrollbar->originalThumbPosition = scrollbar->thumbPosition; + } else if (message->type == ES_MSG_MOUSE_RIGHT_DOWN || message->type == ES_MSG_MOUSE_MIDDLE_DOWN) { + // TODO. } else { return 0; } @@ -2777,8 +2779,20 @@ void ScrollPane::Setup(EsElement *_parent, uint8_t _xMode, uint8_t _yMode, uint1 } if (bar[0] && bar[1]) { - if (!pad) pad = EsCustomElementCreate(parent, ES_CELL_FILL | ES_ELEMENT_NON_CLIENT, ES_STYLE_SCROLLBAR_PAD); - if (pad) pad->cName = "scrollbar pad"; + if (!pad) { + pad = EsCustomElementCreate(parent, ES_CELL_FILL | ES_ELEMENT_NON_CLIENT, ES_STYLE_SCROLLBAR_PAD); + + if (pad) { + pad->cName = "scrollbar pad"; + + pad->messageUser = [] (EsElement *, EsMessage *message) { + // Don't let clicks through. + return message->type == ES_MSG_MOUSE_LEFT_DOWN + || message->type == ES_MSG_MOUSE_MIDDLE_DOWN + || message->type == ES_MSG_MOUSE_RIGHT_DOWN ? ES_HANDLED : 0; + }; + } + } } else if (pad) { EsElementDestroy(pad); pad = nullptr; @@ -6542,7 +6556,7 @@ void UIRefreshPrimaryClipboard(EsWindow *window) { } } -void UIHandleKeyMessage(EsWindow *window, EsMessage *message) { +bool UIHandleKeyMessage(EsWindow *window, EsMessage *message) { if (message->type == ES_MSG_KEY_UP) { if (message->keyboard.scancode == ES_SCANCODE_LEFT_CTRL ) gui.leftModifiers &= ~ES_MODIFIER_CTRL; if (message->keyboard.scancode == ES_SCANCODE_LEFT_ALT ) gui.leftModifiers &= ~ES_MODIFIER_ALT; @@ -6555,14 +6569,13 @@ void UIHandleKeyMessage(EsWindow *window, EsMessage *message) { if (message->keyboard.scancode == ES_SCANCODE_LEFT_ALT && gui.unhandledAltPress) { AccessKeyModeEnter(window); + return true; } else if (window->focused) { EsMessageSend(window->focused, message); - } else if (window->windowStyle == ES_WINDOW_NORMAL) { - uint8_t m = DESKTOP_MSG_UNHANDLED_KEY_EVENT; - MessageDesktop(&m, 1, window->handle); + return true; } - return; + return false; } if (window->targetMenu) { @@ -6587,7 +6600,7 @@ void UIHandleKeyMessage(EsWindow *window, EsMessage *message) { if (window->windowStyle == ES_WINDOW_MENU && message->keyboard.scancode == ES_SCANCODE_ESCAPE) { window->Destroy(); - return; + return true; } if (gui.menuMode) { @@ -6596,16 +6609,16 @@ void UIHandleKeyMessage(EsWindow *window, EsMessage *message) { // TODO Left/right to navigate columns/cycle menubar and open/close submenus. // TODO Up/down to traverse menu. // TODO Enter to open submenu/invoke item. - return; + return true; } else if (gui.accessKeyMode && gui.accessKeys.window == window) { AccessKeyModeHandleKeyPress(message); - return; + return true; } if (window->pressed) { if (message->keyboard.scancode == ES_SCANCODE_ESCAPE) { UIMouseUp(window, nullptr, false); - return; + return true; } } @@ -6613,14 +6626,14 @@ void UIHandleKeyMessage(EsWindow *window, EsMessage *message) { message->type = ES_MSG_KEY_TYPED; if (EsMessageSend(window->focused, message) == ES_HANDLED /* allow messageUser to reject input */) { - return; + return true; } EsElement *element = window->focused; message->type = ES_MSG_KEY_DOWN; if (UIMessageSendPropagateToAncestors(element, message)) { - return; + return true; } } @@ -6632,14 +6645,14 @@ void UIHandleKeyMessage(EsWindow *window, EsMessage *message) { while ((!element->IsFocusable() || (element->flags & ES_ELEMENT_NOT_TAB_TRAVERSABLE)) && element != start); EsElementFocus(element, ES_ELEMENT_FOCUS_ENSURE_VISIBLE | ES_ELEMENT_FOCUS_FROM_KEYBOARD); - return; + return true; } if (window->focused) { if (message->keyboard.scancode == ES_SCANCODE_SPACE && message->keyboard.modifiers == 0) { EsMessage m = { ES_MSG_MOUSE_LEFT_CLICK }; EsMessageSend(window->focused, &m); - return; + return true; } } else { EsMessageSend(window, message); @@ -6650,11 +6663,11 @@ void UIHandleKeyMessage(EsWindow *window, EsMessage *message) { if (window->enterButton && message->keyboard.scancode == ES_SCANCODE_ENTER && !message->keyboard.modifiers && window->enterButton->onCommand && (~window->enterButton->flags & ES_ELEMENT_DISABLED)) { window->enterButton->onCommand(window->instance, window->enterButton, window->enterButton->command); - return; + return true; } else if (window->escapeButton && message->keyboard.scancode == ES_SCANCODE_ESCAPE && !message->keyboard.modifiers && window->escapeButton->onCommand && (~window->escapeButton->flags & ES_ELEMENT_DISABLED)) { window->escapeButton->onCommand(window->instance, window->escapeButton, window->escapeButton->command); - return; + return true; } if (!window->hasDialog) { @@ -6662,7 +6675,7 @@ void UIHandleKeyMessage(EsWindow *window, EsMessage *message) { if (message->keyboard.scancode == ES_SCANCODE_LEFT_ALT) { gui.unhandledAltPress = true; - return; + return true; } if (!gui.keyboardShortcutNames.itemCount) UIInitialiseKeyboardShortcutNamesTable(); @@ -6689,17 +6702,13 @@ void UIHandleKeyMessage(EsWindow *window, EsMessage *message) { command->callback(window->instance, nullptr, command); } - return; + return true; } } } } - if (window->windowStyle == ES_WINDOW_NORMAL) { - uint8_t m = DESKTOP_MSG_UNHANDLED_KEY_EVENT; - MessageDesktop(&m, 1, window->handle); - return; - } + return false; } void UIWindowPaintNow(EsWindow *window, ProcessMessageTiming *timing, bool afterResize) { @@ -6912,7 +6921,7 @@ void UIProcessWindowManagerMessage(EsWindow *window, EsMessage *message, Process if ((!window->activated || window->targetMenu) && window->windowStyle == ES_WINDOW_NORMAL) { window->hovering = false; - goto skipInputMessage; + goto doneInputMessage; } else if (window->dragged) { if (gui.draggingStarted || DistanceSquared(message->mouseMoved.newPositionX - gui.lastClickX, message->mouseMoved.newPositionY - gui.lastClickY) >= GetConstantNumber("dragThreshold")) { @@ -6944,7 +6953,7 @@ void UIProcessWindowManagerMessage(EsWindow *window, EsMessage *message, Process window->hovering = false; } else if (message->type == ES_MSG_MOUSE_LEFT_DOWN || message->type == ES_MSG_MOUSE_RIGHT_DOWN || message->type == ES_MSG_MOUSE_MIDDLE_DOWN) { if (gui.mouseButtonDown || window->targetMenu) { - goto skipInputMessage; + goto doneInputMessage; } UIMouseDown(window, message); @@ -6955,7 +6964,9 @@ void UIProcessWindowManagerMessage(EsWindow *window, EsMessage *message, Process UIMouseUp(window, message, true); } } else if (message->type == ES_MSG_KEY_UP || message->type == ES_MSG_KEY_DOWN) { - UIHandleKeyMessage(window, message); + if (UIHandleKeyMessage(window, message)) { + goto doneInputMessage; + } // If this key was on the numpad, translate it to the normal key. @@ -7000,7 +7011,15 @@ void UIProcessWindowManagerMessage(EsWindow *window, EsMessage *message, Process m.keyboard.modifiers = message->keyboard.modifiers | (nshift ? ES_MODIFIER_SHIFT : 0); m.keyboard.scancode = numpad; m.keyboard.numpad = true; - UIHandleKeyMessage(window, &m); + + if (UIHandleKeyMessage(window, &m)) { + goto doneInputMessage; + } + } + + if (window->windowStyle == ES_WINDOW_NORMAL) { + uint8_t m = DESKTOP_MSG_UNHANDLED_KEY_EVENT; + MessageDesktop(&m, 1, window->handle); } } else if (message->type == ES_MSG_WINDOW_RESIZED) { AccessKeyModeExit(); @@ -7088,7 +7107,7 @@ void UIProcessWindowManagerMessage(EsWindow *window, EsMessage *message, Process } } - skipInputMessage:; + doneInputMessage:; if (timing) timing->endLogic = EsTimeStampMs(); diff --git a/desktop/list_view.cpp b/desktop/list_view.cpp index b09c32c..7ddc86f 100644 --- a/desktop/list_view.cpp +++ b/desktop/list_view.cpp @@ -1654,6 +1654,11 @@ struct EsListView : EsElement { SelectPreview(); } + if (message->keyboard.modifiers & ~(ES_MODIFIER_CTRL | ES_MODIFIER_ALT | ES_MODIFIER_SHIFT)) { + // Unused modifier. + return 0; + } + return KeyInput(message->keyboard.scancode, message->keyboard.modifiers & ES_MODIFIER_CTRL, message->keyboard.modifiers & ES_MODIFIER_ALT, diff --git a/desktop/text.cpp b/desktop/text.cpp index c2b6b9a..835e534 100644 --- a/desktop/text.cpp +++ b/desktop/text.cpp @@ -4404,6 +4404,11 @@ int ProcessTextboxMessage(EsElement *element, EsMessage *message) { bool verticalMotion = false; bool ctrl = message->keyboard.modifiers & ES_MODIFIER_CTRL; + if (message->keyboard.modifiers & ~(ES_MODIFIER_CTRL | ES_MODIFIER_ALT | ES_MODIFIER_SHIFT)) { + // Unused modifier. + return 0; + } + if (message->keyboard.scancode == ES_SCANCODE_LEFT_ARROW || message->keyboard.scancode == ES_SCANCODE_RIGHT_ARROW || message->keyboard.scancode == ES_SCANCODE_HOME || message->keyboard.scancode == ES_SCANCODE_END || message->keyboard.scancode == ES_SCANCODE_UP_ARROW || message->keyboard.scancode == ES_SCANCODE_DOWN_ARROW) { diff --git a/res/Theme Source.dat b/res/Theme Source.dat index 5c20fb8be596a2e63893703caea98b3ac1dce515..395a94a0e0891702f23f07fda975a1fdd71438bf 100644 GIT binary patch delta 108 zcmZpl!+c>5Gpi^A1B3NO)(B16M#e_QlqQaU9Su!QO$`k#j6fMS5U&x)p4_Knz-Yd? zQIm(6$(ng{zfRO-Mxo8G_VaVgO$$yg%FoG3N-PS=D9ugs%u7rz$t+9N3e{r$VcoX* I$0>eh0HAOt6aWAK delta 61 zcmcaGhq-+YGpi^A1B2B@)(FkX4<+O#FYscS9B0P9d4nc9Gn*<I%v7(FoaA9E*#txsfq(Lv0sBPP z{CzJjfy)Q>53??r@EdTmc2(IOwkDznA#p6A z0>h{hAQS9&=I0s60C`}M7M*0S!2qQ!gxygIi^H-%PdO^IRW->tRgJzg;l{-OmV(ucg(@^u2QvmuxHAAdNa{~l$osDg$OoS zzE-@Wz`jwuqrtun@so8(;KzuN42vlw2Wd$MGb=0yY?*oK%JO)-$?kB%a!^@w5!ebP zLMhnF5GFUp&6g3u1IsNXb`4m#;$08+rNWwd6cJirSsi#Pf;Dafi&VTj!PY9Qo8xr5 z;|472l^kw@#lSoC5$FY55jeZSneOm8MCgYlJ|woR5^q7nV2L4qvJQ{~A z>cEN>*3A1Xb}mJP*A+`Ay#Kl+1)^@SAK)b!OhFd1mv33HnXr7IScbt4C=nik9aPvj z&syx>NmvdmmMO3!3Y!6|P?!&_5Ur&U`<$Ga69FR>flkUogZ2CtV@ce2i~8A ztXz8cfxQ)4A=Iv)QIqW@hGF8O)40sZcEWzu%gT?$#;Ty(yv91Z5@#UVkG||l`OI%`%@0X;BFk`l4 zk4d=MvHz;j`P2Od43`fyX|^(crz(cmmOT*>{7qTAxGC=(ap(#va{W*f@(Xvlv{o1I zE_hY*xp+fHDv!IIB9qsSVmolB)SP zC;q6FSNly?W3(FXVf?HnP2}E|WVI{gjn7pA>!Swwfv z5sg94G@>5p#xbIKD6^6%7V6l7&l2QJCVHAjl#D*TLUaYHgnA)sCQ&Oi30V)}XCR~> zhpiTG=MzLDr|`EPqM>R$Mm6|V3Z8VDO8gU*r4YRjIkyw--A2?0<-AN(hcU(DcX1gK z*h=I98-jeVBk2VTd?HyVgq>WC)ze$zT{|BvxQ7$av4(IC<sf%(N2A zOCV}Qe;O)HL^NnBprTDgozM*APQrTwYTk@&zPHdup)bcHfpPas$OuYC2_q87OX(Oi zVuCTKe&6#6Q?QH_q}~Y)SD-zL2_jLSHTVLc?QtUs)VK#K+KPmsvXw+PcMx6sF3}tm zTZKA9*K8O=&Qd^k_SykjmPHo#|fpyq^?J)CLW_hV2dXbF!cJ z2XaFC4)~Shm?2g_mM_~JWG;8Rj&MgMc^Md#v)~Ga73UTLz^Clng?3Bv>w=X zoNo`b_sqf(^PELJ>v6A}W@ZCp4Ib!cTjc)r~@=fS=W z)vkv;*qfnB+@_&EtgatUon~BrSH`1QS}(g~X&Z3tNmNWmD{8N>h?$WB+$xaOOVp zfA_xMIq%$i&b{xwVacak_311>Dj56aWyaWUsJMu+r5=mwT)xOyy+H@Wm=%BGSOdGO zSNwes4vs_L#@Ig%dcnBgfRnYSN_E;`_)CzpFeZTA)35u90D>if-Ph}w!Jsz=SZdF( z>db&)S_+U2_6NiB8HfNU!L}RqOw2V9po}Q-U(peO5RCe&w~6!9qjZ75gf4Sg61GBnP3Kq<${G7LNhx_$vV}U2TOsJvkNRj zicki&C5VYdsi7-~;D%*Dirorkk-R&=<|O8&X+-FPC2HfT2-LV2Y`f&$54J;MK8n+; z&YQ68lIAc776b3#M_>djVq@Px9J}9=R*@7GelT` zWv?`cMX-GmTLL?u)!`7e6BTk1H>x`-VL2vQ8o-WImQl65 zv7YPZTf|FejH>en>~Bhzez3oVjLMh~>@?nlfl)=ZMrZ&L#$owHvOEOKmm zo*Grp5-cT>Wd*EMVryXK64U<-`QiN-vIbyTA^U|f8(2k1o}4FvRT*?!MK1oba6Fl* z)Dwo+Gfd|~+!@OSdn^r~2UffOf!Hi;B|QpL$!^jgIv_pJb?|PKHbev1b&0tt*`!h@ zA~Z{uc6hf)tOM+AiFMKylj`&eZ)px)U>1pWgS8>sz~YK6)ko8a;DhC|WEldx8&n73 zJqq@2aJ^8;af%C9os+P9B+YIL%wsTa)?IvE7r|}^M}T#On#0v7Gd|xxmm*lT_roK$ z(f)nmbS)}^CgW{U%gf8pL`2cn_(L;h*5+c0xKbBKUs`sPE6$~#o11$^=29!&i5ui& z)c6ANRO0cs6jOrs$M_#`ev-aT(D(ukC;m$5*h62&>>>A_aqiX9UOcMs3GLF}7KO)Z zPxgJP@Okaym$!4iN_SuRnlEaf*xNYopaTd0#2wmK2Oo33M)y;H%Ri*%v~PI7*7)iN zT*+{Vn3~-Ysl!LqneI^>8FV=P9c9$ta0lJa@F=5B!Ni5r12=I-|FDO<$$8|u!ZNi7 zN1BYhft)$%e2^~XT*tuS$J_V{T{-?a$FrUL8b<#`?&o|`D|w?$;Wlmh#JdXjQOT(y zK2O7^Qk3Y^)O0#gi#VOA<2980)^%>C&)(9M`Fv`6$xi<++e&$*CK}7PO`G^iz7L;5}u; z-|$Sbv|Qzj^qZDjinmo*P`XF0S9!lU)9Twxp58-@jWshi59OsWHU!ST?jD z>f47;4wSba+cuLi2l|n(F?IuLfJPvzgRyRC39=UACmv+3hOHhi<+F^>!m1oWYG`jnBi9}4E7Q00c|Xa9yP%1~h_KPmO@H2>$O!5?;a7&bA=W6; z7i}(PE>^p*aP!*Z2fm_B;J@yS#d2eTV>jA)w3%_J`9>>J^TBS${&qvfP3v3CeF61! zW57nF3f6lNb%YouIfL!y*yyjMpggH4Tbc*;NrMAwqOX7xU^^t*nWG4tg#Z|!M(jHL z_h!R_FQBz&qDqh#eb$OayNHFY!k{m#Z-{oZq954bHQ48Yz6}-cfZSM{sY;wyp;2Tv z4yS$>O1KSA&kwP6p>fEDMfXCc62|JFK}h&`QBLb|Y;UyPX!W_69Cq166n4({Q6Xqn Jvs^AM`ad+WHE93<