This provides more understandable behavior when snapping off small
windows, ensuring the mouse doesn't hang way off to the side of the
window. It's not ideal for large windows, but it's at least reasonable
there, so it's an overall win.
Resize and drag cursors have been added.
These new cursor types are exposed in two ways:
- Window drag and resize will automatically use the resize cursors if
a cursor is enabled for the window.
- Clients can use new values for yutani_window_show_mouse to set the
current cursor type, or reset it to the previous normal or hidden
state.
The latter functionality is now used in the decoration library to
present the appropriate resize cursor when the mouse is hovered over the
decoration borders.
More cursor options may be added in the future.
Cursor themes will be added in the future as well.
Cursors are stored in /usr/share/cursor
The arrow cursor has been moved to /usr/share/cursor/normal.png
ADDENDUM: A critical heisenbug with window resizing has been fixed in
this commit involving a race with window dimensions and
potentially also buffers.
- Supports directional resizing, including restricted left/right/up/down
- Decoration-initiated resizing is now supported
- Details of how the decorator determines up-restricted resizing
still need some work.
- Corrected issues when attempting to resize to the other side of the
origin.
- Corrected some other compositor issues.
Yutani, glogin, and wallpaper now use timing information from the kernel
to perform animations. Some animation lengths have been adjusted. The
animations should run at the same speed, though with varying
"smoothness" across different hardware (including non-KVM emulators).
Window moves are non-lazy, so continuous updates are received while a
window is being dragged. Prior to this change, a client would not have
any idea where a window was outside of its own idea of when it last
requested a move (which may have been denied, or immediately overriden).
This allows applications to produce child windows in appropriate
locations, or to drag child windows (undocked toolbars, etc.) while they
are being moved.
This uses the same message format as the request format, as well as the
same message type, as has been previously done for various events.
This is a pretty big commit, so let's run through it in parts:
- All of the userspace changes are to switch away from syscall_wait
Mostly, this is to waitpid; some things were tweaked to do things
"properly" instead of waiting for particular processes. Init has
been fixed to do a proper spin wait.
- syscall_wait is gone - as are its uses. newlib bindings have been
using just waitpid for a while now.
- waitpid now performs like a Unix waitpid
- process reaping is no longer a "do this on next change thing":
it happens when a process is waited on, like it should
(That means we can have real zombies: terminated processes that
have not yet been waited on)
- Reparenting of children to init has been implemented, so you
can fork-daemonize!
Overall, this is pretty big... So I hope it doesn't break everything.