[client] ds: detect when the cursor exits into an overlapping window

This adds a new method to the display server interface to allow the
application to notify the ds when there is a guest cursor position
update along with the translated local guest cursor position. This makes
it possible for the display server to keep the local cursor position in
sync with the guest cursor so that window leave events can be detected
when the cursor would move into an overlapping window.

Wayland currently just has a stub for this, and the X11 implementation
still needs some minor tweaking.
This commit is contained in:
Geoffrey McRae
2021-05-04 06:35:36 +10:00
parent cd56321e65
commit d0a12f6097
11 changed files with 122 additions and 54 deletions

View File

@@ -37,6 +37,7 @@ LG_MsgAlert;
bool app_isRunning(void);
bool app_inputEnabled(void);
bool app_isCaptureMode(void);
void app_updateCursorPos(double x, double y);
void app_updateWindowPos(int x, int y);
void app_handleResizeEvent(int w, int h, double scale, const struct Border border);

View File

@@ -129,6 +129,7 @@ struct LG_DisplayServerOps
#endif
/* dm specific cursor implementations */
void (*guestPointerUpdated)(double x, double y, int localX, int localY);
void (*showPointer)(bool show);
void (*grabPointer)();
void (*ungrabPointer)();
@@ -194,6 +195,7 @@ struct LG_DisplayServerOps
ASSERT_OPENGL_FN((x)->glMakeCurrent ); \
ASSERT_OPENGL_FN((x)->glSetSwapInterval); \
ASSERT_OPENGL_FN((x)->glSwapBuffers ); \
assert((x)->guestPointerUpdated); \
assert((x)->showPointer ); \
assert((x)->grabPointer ); \
assert((x)->ungrabPointer ); \

View File

@@ -33,4 +33,11 @@ bool util_guestCurToLocal(struct DoublePoint *local);
void util_localCurToGuest(struct DoublePoint *guest);
void util_rotatePoint(struct DoublePoint *point);
static inline double util_clamp(double x, double min, double max)
{
if (x < min) return min;
if (x > max) return max;
return x;
}
#endif