From 78b93f66becdb47aff2d139ee461fe77baa5108a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?D=C3=A9sir=C3=A9=20Werner=20Menrath?= Date: Thu, 31 Jul 2025 10:07:28 +0200 Subject: [PATCH] commit 32 --- .../custom_file_dialog.cpython-312.pyc | Bin 53885 -> 54212 bytes custom_file_dialog.py | 21 ++++++++++++++---- 2 files changed, 17 insertions(+), 4 deletions(-) diff --git a/__pycache__/custom_file_dialog.cpython-312.pyc b/__pycache__/custom_file_dialog.cpython-312.pyc index 111d897e1cf629f39a338623d54b57a9e62c8780..110370f0033486774977d4a0f450213c9ebbe29c 100644 GIT binary patch delta 1621 zcmah}Yitx%6rMA)vyblk+1+m2ZGl1yLR$!J(~5+Lpn)K$(LWGeI<2&nZJFHyUGA2x zf_7n%Zcn63&;SZywM{G;6k0KsmlA5VjU|>6V@)uCVzM+6{X^m%=&l%lcz=Ak-#zy` zk9*F{!xP-)Q=DN?ug_rU+B0qc<~#AzhAhG=RnlzI2?oN}vdftb6$}$n5JhLd4TnPp z_R-EH*a_Fo%0h+#=CRe;YT%=l3MPW<`t8{Cl-jtSqgpq3P(q>141?RG4W*{DZNRYo9x>LMe!Nd{2|X%d1v zNNY%?6VeKX_4G8P3+V~JoaulKwa=R6e(+ru3 zxqhMS$)zKD!6W1eo}T<}K3%)HzFbZOe+=tXCecXaR>)jC-9@kX%#>HjYKK9Xk98t^EM6pwa|}XZN-Pu!vwP;G)3Xs9<~wZoYn!=f zaq4BM!*toSxn^P|wpxyk!t3c#$P(reV=c5ZwICGl(WJajjY76iLX5;*%RaJ~{>T3R zgH#f&Q!w6Mwy_BcLBYh zIk97pO2r9m2z+z#=Q9qAz{zrv6BP8wEwBL&J9gyS1wN>y^D{M&LE4-UMDYIm_SXmq z%71EWVTx31#Ff;)xJ8CB8LSlU?xZlzH~Z=W{vyRV=WE_N&eiz>zFeu#*djDU9Olb?(NJS zbGl;ugfr{CmyX#_xsSUO{*nCo-{&kCaW3fKrSRUv0GXKe_8o8`*FF>SaCZA@47Z0q3>@!i9Y;z@?nl((-K(^(F# zimZwo62?(oMT+T;HIC}ao?zE?Wl0qkBr}-&0?auw7pL#{(%`-$)p%$BfN{cIa4gtc zIh^&(B%{(-;kjsW`5z3JpM?pNqe~mp#@8fX7&SdTHpNyaibqYAPq6Ez%A}DhlNNjs z^>9ldPjVcXsj-L>EoFsxgW@>%a!Zpqj%yCJLO%{2^1ylg{SZ-JrZ({kHg>haRlMKT zRC-fB7?c&-%~Orod2JP$OFz7IptB9)(52QYx%gv(MFsM)$vXl&lpP_wbR zp{{yMSUPj^2NohyG;tfCOA35!=AmDD>k~D=QR!gsA`Z? z#zcGc@^vdEo63xUAtnt9x(D=G|>0>8&&JzaR2}S delta 1445 zcmZWoe@v8h7=NGd-Fw{cJGeXWI1x$wacKOILc&KBeN=qCrYRO?o4h79(Xc3oMD|Np05FAN|@w8=I@K`hE{FtMB$cdp^(ed7kg* zdER|T&S+-4HP+897NfvU#=)kN?Z^AA@su>`)D(IQh%XK+tPZ@TShOM6JurUo0kFJ| z0m0|SwvXa%`5Hk`w2G+cs7_uO!lRG4h%W&vVjT&(zPMiCmk0s~RFqd#8s?B7_!cpS zQ%6NcA(&bnkKfhBX`>W<2;Z)9p#hy(zRHkes9Z8%A$h2QM%5BQkUX_adN1?%QH+u` zpZSVOF;nd(p%r$$&ya-)OvZ{n2Q23@b-@^F@p<`R?uGNBWN1#WOqpxLB&~|j)A05d z7o_t6;w<+svHp*j$r)I`)nHU?)E10k_dUu(V8KBB!>%Z*mlFCG^=jwZD|Tx4t>JmM ziJGNEX|a^pm((lHW!ZM@zQ-b4|E=B}Ws_~JTQ_ATpW|AZeUhQ?r0tP>A6xPfonA=+7|oO?RQ8r)dcumEQp?B0!Y6#`R2?~l!O z(HQC|)@%}XWw3ru>csDRobggBwH8C8Pz+MqA;Y{NMvtVoNa@r{?ZqTQ$as*@oT(Mq z{GM8N9W~bKSWh#>m5X5HOLVaB_Z@iqP_l_gBmj~| zfe^tYzbg+U?LQJ~1h4qC{1ju$d%59tQ{w(WX=Tt$rZj>5`=-n_Ri#BQ?+zBqWq!X` zBWFb@Qjx#10Dpb8ctJA5ck6|4eBxW)c5i3JsnoV7dI}nI)waX!09IVt_#@cS8CnKO zxGuESIHliH8jyAu`2F}=sGpn%%xP-TdRZ47YuZWvB>2$l@1_w$`m|m!*pAvlwv*N# z+oXPNSZ|FWb7$G4KI`8IU+hT74b27M!4EqMQ9Lqi4||q&)}G7$GXC*9g4U7?IC&(^ zIwL@IE=))9z_bywTN23{kDA}I%nz_6Sb2^Iw; zxrmXxMCR{6-p*5ln0b=wE^+rV4xDU&QC!nro-xG(pYbwN$-Uj}DUjtsUN^>bc~YU4$RmQgxB$p9EuuMJ%!FoBJq{s3Xzcj*j#tGX`NgLah3 z#DZEUzBgirTk6nA5a4HZ^%X6^RkU4+#ciWzGDFlCMn4uItj3M626C6EdDqry?8AKW zU$_yOKzRs{U(Yh}hVnEwSMkR6wa|_BiH*8!(S4^H)aNIj1J_F?h-;Nk9B4Z*BXD1~ HvaS3L{rRC1 diff --git a/custom_file_dialog.py b/custom_file_dialog.py index e55371e..83a8b5c 100644 --- a/custom_file_dialog.py +++ b/custom_file_dialog.py @@ -484,12 +484,20 @@ class CustomFileDialog(tk.Toplevel): scrollregion=canvas.bbox("all"))) def _on_mouse_wheel(event): - delta = -1 if event.num == 4 else 1 + # Determine the scroll direction and magnitude + if event.num == 4: # Scroll up on Linux + delta = -1 + elif event.num == 5: # Scroll down on Linux + delta = 1 + else: # MouseWheel event for Windows/macOS + delta = -1 * int(event.delta / 120) canvas.yview_scroll(delta, "units") - canvas.bind_all("", _on_mouse_wheel) - canvas.bind_all("", _on_mouse_wheel) - canvas.bind_all("", _on_mouse_wheel) + # Bind mouse wheel events to the canvas and the container frame + for widget in [canvas, container_frame]: + widget.bind("", _on_mouse_wheel) + widget.bind("", _on_mouse_wheel) + widget.bind("", _on_mouse_wheel) items, error, warning = self._get_sorted_items() if warning: @@ -522,11 +530,16 @@ class CustomFileDialog(tk.Toplevel): name, 14), anchor="center", style="Item.TLabel") name_label.pack(fill="x", expand=True) Tooltip(item_frame, name) + # Bind events to all individual widgets so scrolling works everywhere for widget in [item_frame, icon_label, name_label]: widget.bind("", lambda e, p=path: self.on_item_double_click(p)) widget.bind("", lambda e, p=path, f=item_frame: self.on_item_select(p, f)) + widget.bind("", _on_mouse_wheel) + widget.bind("", _on_mouse_wheel) + widget.bind("", _on_mouse_wheel) + col = (col + 1) % col_count if col == 0: row += 1