aboutsummaryrefslogtreecommitdiff
path: root/backend
diff options
context:
space:
mode:
authoremersion <contact@emersion.fr>2017-11-17 23:29:47 +0100
committeremersion <contact@emersion.fr>2017-11-17 23:29:47 +0100
commit27937add762bb2594828ac678859bfdde4275f1e (patch)
treeaa9813fd534d019a5e967ffad31d153d30ae7fa1 /backend
parent3e3209cba22c9a5a562acc5e543946408a36e2f4 (diff)
parentbf5640db128b930b38ebca2b1d8a79e028ad9f39 (diff)
Merge branch 'master' into laggy-move-resize
Diffstat (limited to 'backend')
-rw-r--r--backend/drm/util.c9
-rw-r--r--backend/libinput/events.c5
-rw-r--r--backend/libinput/tablet_tool.c2
-rw-r--r--backend/session/logind.c6
-rw-r--r--backend/session/session.c4
-rw-r--r--backend/wayland/backend.c14
-rw-r--r--backend/wayland/output.c2
-rw-r--r--backend/wayland/wl_seat.c2
-rw-r--r--backend/x11/backend.c10
9 files changed, 37 insertions, 17 deletions
diff --git a/backend/drm/util.c b/backend/drm/util.c
index 656c070a..c27d7b67 100644
--- a/backend/drm/util.c
+++ b/backend/drm/util.c
@@ -106,8 +106,15 @@ void parse_edid(struct wlr_output *restrict output, size_t len, const uint8_t *d
if (nl) {
*nl = '\0';
}
+ } else if (flag == 0 && data[i + 3] == 0xFF) {
+ sprintf(output->serial, "%.13s", &data[i + 5]);
- break;
+ // Monitor serial numbers are terminated by newline if they're too
+ // short
+ char *nl = strchr(output->serial, '\n');
+ if (nl) {
+ *nl = '\0';
+ }
}
}
}
diff --git a/backend/libinput/events.c b/backend/libinput/events.c
index 5da45c67..3ca41124 100644
--- a/backend/libinput/events.c
+++ b/backend/libinput/events.c
@@ -66,10 +66,11 @@ static void handle_device_added(struct wlr_libinput_backend *backend,
int product = libinput_device_get_id_product(libinput_dev);
const char *name = libinput_device_get_name(libinput_dev);
struct wl_list *wlr_devices = calloc(1, sizeof(struct wl_list));
- wl_list_init(wlr_devices);
if (!wlr_devices) {
- goto fail;
+ wlr_log(L_ERROR, "Allocation failed");
+ return;
}
+ wl_list_init(wlr_devices);
wlr_log(L_DEBUG, "Added %s [%d:%d]", name, vendor, product);
if (libinput_device_has_capability(libinput_dev, LIBINPUT_DEVICE_CAP_KEYBOARD)) {
diff --git a/backend/libinput/tablet_tool.c b/backend/libinput/tablet_tool.c
index 3caaf3f7..3d5fafc3 100644
--- a/backend/libinput/tablet_tool.c
+++ b/backend/libinput/tablet_tool.c
@@ -70,6 +70,8 @@ void handle_tablet_tool_axis(struct libinput_event *event,
wlr_event.updated_axes |= WLR_TABLET_TOOL_AXIS_WHEEL;
wlr_event.wheel_delta = libinput_event_tablet_tool_get_wheel_delta(tevent);
}
+ wlr_log(L_DEBUG, "Tablet tool axis event %d @ %f,%f",
+ wlr_event.updated_axes, wlr_event.x_mm, wlr_event.y_mm);
wl_signal_emit(&wlr_dev->tablet_tool->events.axis, &wlr_event);
}
diff --git a/backend/session/logind.c b/backend/session/logind.c
index 42b48e94..daff75b6 100644
--- a/backend/session/logind.c
+++ b/backend/session/logind.c
@@ -123,7 +123,7 @@ static bool logind_change_vt(struct wlr_session *base, unsigned vt) {
return ret >= 0;
}
-static bool find_sesion_path(struct logind_session *session) {
+static bool find_session_path(struct logind_session *session) {
int ret;
sd_bus_message *msg = NULL;
sd_bus_error error = SD_BUS_ERROR_NULL;
@@ -303,7 +303,7 @@ static bool add_signal_matches(struct logind_session *session) {
"member='%s',"
"path='%s'";
- snprintf(str, sizeof(str), fmt, "Manager", "SesssionRemoved", "/org/freedesktop/login1");
+ snprintf(str, sizeof(str), fmt, "Manager", "SessionRemoved", "/org/freedesktop/login1");
ret = sd_bus_add_match(session->bus, NULL, str, session_removed, session);
if (ret < 0) {
wlr_log(L_ERROR, "Failed to add D-Bus match: %s", strerror(-ret));
@@ -368,7 +368,7 @@ static struct wlr_session *logind_session_create(struct wl_display *disp) {
goto error;
}
- if (!find_sesion_path(session)) {
+ if (!find_session_path(session)) {
sd_bus_unref(session->bus);
goto error;
}
diff --git a/backend/session/session.c b/backend/session/session.c
index b14ca4d0..657558fd 100644
--- a/backend/session/session.c
+++ b/backend/session/session.c
@@ -249,7 +249,7 @@ static size_t explicit_find_gpus(struct wlr_session *session,
}
} while ((ptr = strtok_r(NULL, ":", &save)));
- free(ptr);
+ free(gpus);
return i;
}
@@ -257,7 +257,7 @@ static size_t explicit_find_gpus(struct wlr_session *session,
* If it's not found, it returns the first valid GPU it finds.
*/
size_t wlr_session_find_gpus(struct wlr_session *session,
- size_t ret_len, int ret[static ret_len]) {
+ size_t ret_len, int *ret) {
const char *explicit = getenv("WLR_DRM_DEVICES");
if (explicit) {
return explicit_find_gpus(session, ret_len, ret, explicit);
diff --git a/backend/wayland/backend.c b/backend/wayland/backend.c
index 532935b8..1801f3e0 100644
--- a/backend/wayland/backend.c
+++ b/backend/wayland/backend.c
@@ -12,10 +12,15 @@
#include "backend/wayland.h"
#include "xdg-shell-unstable-v6-client-protocol.h"
-
static int dispatch_events(int fd, uint32_t mask, void *data) {
struct wlr_wl_backend *backend = data;
int count = 0;
+
+ if ((mask & WL_EVENT_HANGUP) || (mask & WL_EVENT_ERROR)) {
+ wl_display_terminate(backend->local_display);
+ return 0;
+ }
+
if (mask & WL_EVENT_READABLE) {
count = wl_display_dispatch(backend->remote_display);
}
@@ -36,7 +41,7 @@ static bool wlr_wl_backend_start(struct wlr_backend *_backend) {
wlr_log(L_INFO, "Initializating wayland backend");
wlr_wl_registry_poll(backend);
- if (!(backend->compositor) || (!(backend->shell))) {
+ if (!backend->compositor || !backend->shell) {
wlr_log_errno(L_ERROR, "Could not obtain retrieve required globals");
return false;
}
@@ -49,10 +54,9 @@ static bool wlr_wl_backend_start(struct wlr_backend *_backend) {
struct wl_event_loop *loop = wl_display_get_event_loop(backend->local_display);
int fd = wl_display_get_fd(backend->remote_display);
- int events = WL_EVENT_READABLE | WL_EVENT_ERROR |
- WL_EVENT_HANGUP;
+ int events = WL_EVENT_READABLE | WL_EVENT_ERROR | WL_EVENT_HANGUP;
backend->remote_display_src = wl_event_loop_add_fd(loop, fd, events,
- dispatch_events, backend);
+ dispatch_events, backend);
wl_event_source_check(backend->remote_display_src);
return true;
diff --git a/backend/wayland/output.c b/backend/wayland/output.c
index 90f8b39a..c4301617 100644
--- a/backend/wayland/output.c
+++ b/backend/wayland/output.c
@@ -249,7 +249,7 @@ struct wlr_output *wlr_wl_output_create(struct wlr_backend *_backend) {
wlr_output_init(&output->wlr_output, &backend->backend, &output_impl);
struct wlr_output *wlr_output = &output->wlr_output;
- wlr_output_update_size(wlr_output, 640, 480);
+ wlr_output_update_size(wlr_output, 1280, 720);
strncpy(wlr_output->make, "wayland", sizeof(wlr_output->make));
strncpy(wlr_output->model, "wayland", sizeof(wlr_output->model));
snprintf(wlr_output->name, sizeof(wlr_output->name), "WL-%d",
diff --git a/backend/wayland/wl_seat.c b/backend/wayland/wl_seat.c
index deed215e..a2da8df5 100644
--- a/backend/wayland/wl_seat.c
+++ b/backend/wayland/wl_seat.c
@@ -90,7 +90,7 @@ static void pointer_handle_axis(void *data, struct wl_pointer *wl_pointer,
struct wlr_event_pointer_axis wlr_event;
wlr_event.device = dev;
- wlr_event.delta = value;
+ wlr_event.delta = wl_fixed_to_double(value);
wlr_event.orientation = axis;
wlr_event.time_msec = time;
wlr_event.source = wlr_wl_pointer->axis_source;
diff --git a/backend/x11/backend.c b/backend/x11/backend.c
index 97b0dd8c..b798daf6 100644
--- a/backend/x11/backend.c
+++ b/backend/x11/backend.c
@@ -155,9 +155,14 @@ static bool handle_x11_event(struct wlr_x11_backend *x11, xcb_generic_event_t *e
static int x11_event(int fd, uint32_t mask, void *data) {
struct wlr_x11_backend *x11 = data;
+
+ if ((mask & WL_EVENT_HANGUP) || (mask & WL_EVENT_ERROR)) {
+ wl_display_terminate(x11->wl_display);
+ return 0;
+ }
+
xcb_generic_event_t *e;
bool quit = false;
-
while (!quit && (e = xcb_poll_for_event(x11->xcb_conn))) {
quit = handle_x11_event(x11, e);
free(e);
@@ -205,7 +210,8 @@ struct wlr_backend *wlr_x11_backend_create(struct wl_display *display,
int fd = xcb_get_file_descriptor(x11->xcb_conn);
struct wl_event_loop *ev = wl_display_get_event_loop(display);
- x11->event_source = wl_event_loop_add_fd(ev, fd, WL_EVENT_READABLE, x11_event, x11);
+ int events = WL_EVENT_READABLE | WL_EVENT_ERROR | WL_EVENT_HANGUP;
+ x11->event_source = wl_event_loop_add_fd(ev, fd, events, x11_event, x11);
if (!x11->event_source) {
wlr_log(L_ERROR, "Could not create event source");
goto error_x11;