redox-wayland-compositor/docs/phase7-7-post-release.png

7 lines
2.1 KiB
Text
Raw Normal View History

🎉 Phase 7.7 — move interactif xdg_toplevel validé runtime Move interactif complet (Resize en stub log-only, reportable à 7.8). Frontend additions : - enum DragMode { Move, Resize(u32) } et struct InteractiveDrag { surface_id, xdg_toplevel_res, xdg_surface_res, mode, start_cursor_x/y, start_x/y, start_w/h } - WaylandFrontend : interactive_drag: Option<InteractiveDrag> + last_button_serial: u32 - XdgToplevelData.xdg_surface: Mutex<Option<XdgSurface>> peuplé dans xdg_surface.GetToplevel pour retrouver le wl_surface parent depuis un toplevel.move/resize - Handler xdg_toplevel.Move : valide serial != 0, refuse drag déjà actif, retrouve SurfaceId via cascade UserData (xdg_surface → wl_surface → SurfaceData), capture start_cursor + start_geom, stocke InteractiveDrag - Handler xdg_toplevel.Resize : stub log-only (à compléter 7.8) - Handler xdg_toplevel.Destroy nettoie interactive_drag si on était en train de drag cette surface - Méthode apply_interactive_drag() : applique le delta (cursor - start_cursor) à la position de la surface (Move) ou consume le motion (Resize stub) - forward_input(PointerMotion(Relative)) : apply au début, return si drag actif (court-circuite l'envoi de motion au client pendant un drag, conforme spec Wayland) - forward_input(PointerButton release) : sort du mode drag - set_cursor_position : appelle aussi apply_interactive_drag (sans ça, les cycles de test programmatique ne déclenchent pas le drag car ils court-circuitent forward_input) - Tracking last_button_serial à chaque button LEFT Pressed Test client modifications : - redox-wl-test-client-shm-two bind wl_seat - Si label=="A", déclenche toplevel.move(&seat, 1) 8s après le commit initial (mécanisme "synthétique" : le client n'écoute pas les pointer events, il envoie Move sans attendre un clic — assez pour valider le pipeline serveur, durcissement client 7.8) Validation runtime : - Cycle compositor temporaire (retiré du binaire final) qui change cursor_position à plusieurs positions pendant que le drag est actif, screendumps à 3 positions distinctes - Logs frontend : [frontend] xdg_toplevel.move: enter drag sid=SurfaceId(0) start=(60,60) cursor=(500,400) [frontend] left-release → exit interactive drag - A déplacée visuellement entre les captures pos1, pos2 et post-release ; sortie clipée sur les bords (pas de snap-to-edge, WM policy reportable) Limitations 7.7 : - Resize non implémenté (stub) - Validation serial laxiste (serial != 0) - Pas de contrôle policy (snap-to-edge, min/max) - Pas de check "surface du même client" (sécu) - Pas d'event xdg_toplevel.configure([Resizing]) envoyé pendant le drag Doc complète : docs/phase7-7-move-resize.md Leyoda 2026 – GPLv3
2026-05-13 19:22:04 +02:00
<EFBFBD>PNG

IHDR <00><><EFBFBD><EFBFBD> cHRMz&<00><><00><00><>u0<00>`:<3A>p<><70>Q<PLTE Z<>P<EFBFBD><50><EFBFBD><EFBFBD>`<60>[<5B><>bbKGD L<>tIME<07> .Hj<48>i%tEXtdate:create2026-05-13T17:08:42+00:00<0E>vp%tEXtdate:modify2026-05-13T17:08:42+00:00<30><7F><EFBFBD>(tEXtdate:timestamp2026-05-13T17:08:46+00:00<30><30><EFBFBD>:IDATx<54><78><EFBFBD><EFBFBD>mWEQ<45><51><00><02><><EFBFBD><1D><1D><><EFBFBD><EFBFBD>Oe<4F><65><19>I<><49><EFBFBD><EFBFBD> <0B>ke<6B><65><EFBFBD>)<29><><EFBFBD>էO<D5A7>/<2F>a<EFBFBD>_<EFBFBD>e <09><>I <09><>I <09><>I <09><>I <09><>I <09><>I <09><>I <09><>I <09><>I <09><>`<60><> 6<17><>M<EFBFBD>|<7C>\<5C><><EFBFBD><EFBFBD>
p<EFBFBD><EFBFBD><00>n<EFBFBD><6E> <14>c<01>ns(<28>=<3D><02>}<00>&P<>{L<05>GS(<28>=<3D><02>s<00>&P<>{ <05>WC(<28>=f<02><>M<><00><> <09><><EFBFBD><EFBFBD>L<EFBFBD><00> <09><><01><>@<01>1<12><17><>L<EFBFBD><00><><08><><1C>@<01>1<11><><EFBFBD>&&P<>{ <04>|'&P<>{ <04>U(<28>=<3D><03>z&P<>{<7B><07>M<4D>(<28>=<3D><03>v<00>'P<>{<07>B<42>(<28>=N|i<00>'P<>{<7B><06>b<62>(<28>=|yO'P<>{<06>J<4A>(<28>=<3D>|m'P<>{<7B><05>jg(<28>=<3D>|}<00>&P<>{<05>FG(<28>=N|k<00>&P<>{<7B><04>f'(<28>=|{O&P<>{<04><><EFBFBD>&P<>{<7B><1F><><06>`<05><><EFBFBD>~<7E><><EFBFBD>'P<>{<7B><1D><><07><> <14>w<07><><EFBFBD><EFBFBD><EFBFBD>@<01>qo<71><6F><19><>'P<>{<7B><1B><><EFBFBD><EFBFBD>w<05>ǝ<01>o<00><>@<01>qg<71><67><EFBFBD><EFBFBD><EFBFBD> <14><16><><EFBFBD><03><>W0)<29><03><>K)<29><05>r7 )<29><03>rG4<47><34>gBު<42>3!<21><><EFBFBD>Sq<53>G<EFBFBD><47>8<EFBFBD><38><EFBFBD><EFBFBD><EFBFBD>{<7B> ;<<19><>̜<EFBFBD><CC9C><EFBFBD><EFBFBD><EFBFBD> <0A><>2<05>3N<33>"<22>|@RNH%<25><>hRN<52>'<27>=!<21><>)<29><><77><C591>LR<4C>L<><1B>I <04>8=<3D>\d"<22><><EFBFBD><14>"><0F> <09>iv<05><>H<EFBFBD><48><EFBFBD>(<28>Ef|@.2<13><><EFBFBD>
p<EFBFBD><EFBFBD><00>&P<><50> <05>89<38>\d*<2A><><EFBFBD><14>"S><0E> <0B>in<05><>X<EFBFBD><58>s(<28>E<EFBFBD>|@.2<17><><EFBFBD>
p<EFBFBD><EFBFBD><00>p<01> )<01> )<01> )<01> )<01> )<01> )<01> )<01> )<01> ?<3F><>% p<>:5.<2E><><EFBFBD> p<01> )<01> )<01> )<01> )<01> )<01> )<01> )<01> )<01> )<01> )<01> )<01> )<01> )<01> )<01> )<01> )<01> )<01><>f<EFBFBD>/<2F>?)<29>$u<><00>O<EFBFBD>F<><46>HJ<48><4A>HJ<48><4A>HJ<48><4A>HJ<48><4A>HJ<48><4A>HJ<48><4A>HJ<48><4A>HJ<48><4A>HJ<48><4A><03>I<EFBFBD>|<7C>T<EFBFBD><54>? 5(<28>=<3D><02><>& <14>3<01>n<EFBFBD>
p<EFBFBD><EFBFBD>o<><6F><05><>D<EFBFBD><44>|<19>M<EFBFBD>|<7C>D<EFBFBD><44><EFBFBD><EFBFBD><EFBFBD>@<01>1<10><><01><>@<01>1<10>W<EFBFBD> L<><00> <20><><00><>\<5C><05><>I<><07>M<4D><7F>`<01>!@R<>~{><3E> p<01> )<01> )<01>:<0E><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><11><16><>I <09><>I <09><>I<><1B><>I<>#<23><>Iy*<2A><>I9<19><><EFBFBD>aH9<1D><><EFBFBD>I9!<21><><EFBFBD>4<EFBFBD> )<01> )<01><>W0)<29><03><>K)<29><05>r7 )<29><03><> )<29><05> )gÐ )<01> )<01> )<29> !eI <09><>I <09><>I <09><><EFBFBD>aH <09><>;<3B>I <09><><EFBFBD><EFBFBD>H <09><><EFBFBD>H9<1B><>ӱH9<1F><>RI <0A><17>:<3A>|<7C>?.2xJ<EFBFBD>P}\<5C>kH <09><>I <09><>I <09><>I <09><>I <09><>I <09><>I <09><>I <09><>I <09><>I <09><>I <09><>I <09><>I <09><>I <09><>I <09><>I <09><>I <09><>I <09><>I <09><>Im <0B><><EFBFBD><03><>m~<7E>?p<><70><16>L൬ <0B><><EFBFBD><13><>u<01>L<EFBFBD><4C><EFBFBD> <0B>^ʾM<><4D>, <0C>^<5E><>M<><4D>l <0C>^<5E><>?6<7F>ױ.<2E><>]<5D>/e]<5D><><EFBFBD>*<2A>R<EFBFBD><05><>o!ײ-<2D>O<EFBFBD><4F><EFBFBD>|%<25>tC̥, <0C>+ <20><>K<EFBFBD>?~<7E>:50<><30><EFBFBD><EFBFBD>*r_IEND<4E>B`<60>