Keep track of the window cursor set for each surface and apply it when
the pointer enters the corresponding surface. This fixes a problem where
due to transient disagreements between win32 pointer focus and Wayland
pointer focus a cursor update may be lost. For example:
1. Assume existing cursor C1.
2. Window is created beneath cursor.
3. The SetCursor(hwnd, C2) driver callback is called, but because the
wl_pointer hasn't entered the Wayland surface yet we don't update
the wl_pointer cursor.
4. wl_pointer enters the surface, we apply the latest cursor we know
about, which is C1.
5. Since no change in cursor window occurs, we don't get any
further SetCursor(hwnd, C2) callbacks, so we get stuck with C1.
This commit fixes the problem by tracking the per-surface HCURSOR in
step 3, regardless of whether the cursor is actually applied. So, in
step 4 we can use that HCURSOR for the surface.
This change also fixes some cases of our mouselook heuristics not
kicking in properly due to missing a SetCursor(hwnd, NULL) in the
manner described above.
This check was introduced in 4640be8dc8. At that point the only way for that
condition to be false was for a cube map texture.
It's not clear why cube maps are relevant here; we have no tests for this, but
it seems most expedient to just preserve the intent of the check.
While armv7 generally tolerates unaligned loads/stores in most
cases, the compiler is free to use the ldrd/strd instructions,
for loading/storing two consecutive 32 bit registers, and this
requires the destination to be aligned to a 4 byte boundary.
When packing a number of variable length structures, make sure
that each actual struct gets aligned at the right address
boundary.
This fixes crashes in DllMain of wineps.drv, when built for
armv7, since 351e58dc2d.
Signed-off-by: Martin Storsjö <martin@martin.st>
geometry->fill.bezier_vertices was being freed on the failed path in
d2d_geometry_sink_Close and then again when the path geometry was
released (in d2d_geometry_cleanup).
By setting it to NULL after freeing it initially, all other calls
to free it are a no-op.
This fixes a rendering issue (and ultimately a crash) in PowerPoint when
compiling with GCC 8.
GCC8 doesn't support the `excess-precision=standard` option under the
`#pragma GCC optimize` directive.
This results in unpredictable floating point rounding leading to errors
when inserting segments (with missing edges and/or triangles).
Using 24-bit precision ensures we don't have any excess precision.
Dvorak detection would sometimes fallback to Phantom keys, because we
only use seq as a tie breaker greater emphasis on locality is required
for layouts using the same language.
Signed-off-by: Daniel Hill <daniel@gluo.nz>
This make dvorak more consistent with X11/Wayland/Windows, qwertz and
azerty layouts having the same physical scancode layout as a qwerty
keyboard and only differing in the labels on the keycaps.
Signed-off-by: Daniel Hill <daniel@gluo.nz>