aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--backend/session/logind.c10
-rw-r--r--include/wlr/types/wlr_relative_pointer_v1.h8
-rw-r--r--types/wlr_relative_pointer_v1.c4
3 files changed, 16 insertions, 6 deletions
diff --git a/backend/session/logind.c b/backend/session/logind.c
index 9a1383ce..5bde16c2 100644
--- a/backend/session/logind.c
+++ b/backend/session/logind.c
@@ -294,7 +294,8 @@ error:
return 0;
}
-static int resume_device(sd_bus_message *msg, void *userdata, sd_bus_error *ret_error) {
+static int resume_device(sd_bus_message *msg, void *userdata,
+ sd_bus_error *ret_error) {
struct logind_session *session = userdata;
int ret;
@@ -309,7 +310,12 @@ static int resume_device(sd_bus_message *msg, void *userdata, sd_bus_error *ret_
if (major == DRM_MAJOR) {
struct wlr_device *dev = find_device(&session->base, makedev(major, minor));
- dup2(fd, dev->fd);
+
+ close(dev->fd);
+ if (fcntl(fd, F_DUPFD_CLOEXEC, dev->fd) < 0) {
+ wlr_log_errno(WLR_ERROR, "Failed to duplicate file descriptor");
+ goto error;
+ }
if (!session->base.active) {
session->base.active = true;
diff --git a/include/wlr/types/wlr_relative_pointer_v1.h b/include/wlr/types/wlr_relative_pointer_v1.h
index 076fac56..32ed574b 100644
--- a/include/wlr/types/wlr_relative_pointer_v1.h
+++ b/include/wlr/types/wlr_relative_pointer_v1.h
@@ -64,13 +64,17 @@ void wlr_relative_pointer_manager_v1_destroy(
struct wlr_relative_pointer_manager_v1 *manager);
/**
- * Send a relative motion event to the seat with the same wl_pointer as relative_pointer
+ * Send a relative motion event to the seat. Time is given in microseconds
+ * (unlike wl_pointer which uses milliseconds).
*/
void wlr_relative_pointer_manager_v1_send_relative_motion(
struct wlr_relative_pointer_manager_v1 *manager, struct wlr_seat *seat,
- uint64_t time_msec, double dx, double dy,
+ uint64_t time_usec, double dx, double dy,
double dx_unaccel, double dy_unaccel);
+/**
+ * Get a relative pointer from its resource. Returns NULL if inert.
+ */
struct wlr_relative_pointer_v1 *wlr_relative_pointer_v1_from_resource(
struct wl_resource *resource);
diff --git a/types/wlr_relative_pointer_v1.c b/types/wlr_relative_pointer_v1.c
index 17e65b67..04a44725 100644
--- a/types/wlr_relative_pointer_v1.c
+++ b/types/wlr_relative_pointer_v1.c
@@ -252,7 +252,7 @@ void wlr_relative_pointer_manager_v1_destroy(struct wlr_relative_pointer_manager
void wlr_relative_pointer_manager_v1_send_relative_motion(
struct wlr_relative_pointer_manager_v1 *manager, struct wlr_seat *seat,
- uint64_t time_msec, double dx, double dy,
+ uint64_t time_usec, double dx, double dy,
double dx_unaccel, double dy_unaccel) {
struct wlr_seat_client *focused = seat->pointer_state.focused_client;
if (focused == NULL) {
@@ -268,7 +268,7 @@ void wlr_relative_pointer_manager_v1_send_relative_motion(
}
zwp_relative_pointer_v1_send_relative_motion(pointer->resource,
- (uint32_t)(time_msec >> 32), (uint32_t)time_msec,
+ (uint32_t)(time_usec >> 32), (uint32_t)time_usec,
wl_fixed_from_double(dx), wl_fixed_from_double(dy),
wl_fixed_from_double(dx_unaccel), wl_fixed_from_double(dy_unaccel));
}