Idea: "elastic" move
Dominik Vogt <[email protected]> Sun, 21 Nov 2021 15:29:29 +0100
| Newsgroups | gmane.comp.window-managers.fvwm.devel |
|---|---|
| Message-ID | <[email protected]> |
Duing the the discussion about annoying page flipping during
interactive move Thomas said that he switched it off because it
was annoying and that the pages then felt like disconnected
desktops.
This is precisely true and matches my own opinion. Fvwm should be
better than that. The big, paged virtual desktop should not feel
like disjoint desktops but like a big sketch block with plenty of
space.
=> Make crossing the page boundaries easier and intuitive without
being annoying.
Situation: At the moment, interactive move with the mouse feels
awkward. Pushing windows past the page edge often fails because
the pointer hits the edge and cannot move further. It's annoying
and uncomfortable. The "pointer hits page border" this is a real
show stopper.
--
This is the idea (working title "elastic paging"):
1. When an interactive move starts:
- Replace the pointer with an invisible one.
- Warp the pointer to the middle of the screen. There it can
always be moved in all directions.
- If the pointer gets too close to the page edges, warp it back
to the middle of the screen.
- At the end of the move, warp it back to the original
position relative to the window.
(- Maybe a fake cursor can be drawn at the original position so
that the user does not get confused.)
Note: Its then possible to move a window any distance without
releasing the pointer.
Note 2: As a side effect, windows can also be pushed over the
desktop borders (maybe enforce that at least a couple of pixels
remain visible).
2. Remove timed paging during interactive move completely
(EdgeMoveDelay style)
3. Instead, when you push the original pointer position off page
the viewport automatically starts scrolling to keep that
position (the fake pointer) visible.
Think of the current viewport position being connected with the
original one with a rubber band: If you change you mind and
move the window back towards its original position, the viewport
also moves back, relaxing the rubber band.
(When windows on other pages become visible, snapattraction
automatically allows to snap to them.)
4. When the move ends, the window is placed and the viewport snaps
back to a full page. It may be a bit tricky to choose the
proper page automatically. It's easy if the window has
completely moved to another page, but what if it's stuck between
two or even four pages?
5. Visual feedback (optional)
- If the viewport jumps use some kind of smooth animation.
This may be especially important if the viewport snaps to a
full page when the move ends.
- See how the fake pointer can be implemented.
- Add a new "activity" colour to window decorations. This
colour may be used while a long running action affects a
window (interactive move/resize etc.).
- The "activity" colour could also be used when a window
border hits the page edge during an interactive move. Say,
if the window is already at the edge and you keep "pushing",
that border uses the "activity" colour to indicate that
something is happening.
6. Future
- Also do something about interactive resize.
- If elastic paging works nicely, it should become the default
behaviour. To disable it, you have to turn it off
explicitly - an empty config still has it on.
Ciao
Dominik ^_^ ^_^
--
Dominik Vogt