aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSimon Zeni <simon@bl4ckb0ne.ca>2022-03-02 16:07:40 -0500
committerKirill Primak <vyivel@eclair.cafe>2022-03-07 16:37:41 +0000
commit10cbb9fbe141ee8f5c766783bde645ae19998d22 (patch)
tree79f6d761896044040c81f97ecac33e30c06448f9
parent8d3cb94b41b3c21350e16e38a00f4e33941c33d5 (diff)
interface/wlr_touch: rework destroy sequence
The destroy callback in wlr_touch_impl has been removed. The function `wlr_touch_finish` has been introduced to clean up the resources owned by a wlr_touch. `wlr_input_device_destroy` no longer destroys the wlr_touch, attempting to destroy a wlr_touch will result in a no-op. The field `name` has been added to the wlr_touch_impl to be able to identify a given wlr_touch device.
-rw-r--r--backend/libinput/events.c2
-rw-r--r--backend/libinput/touch.c6
-rw-r--r--backend/wayland/seat.c4
-rw-r--r--backend/x11/input_device.c6
-rw-r--r--backend/x11/output.c2
-rw-r--r--include/wlr/interfaces/wlr_touch.h4
-rw-r--r--types/wlr_input_device.c3
-rw-r--r--types/wlr_touch.c7
8 files changed, 12 insertions, 22 deletions
diff --git a/backend/libinput/events.c b/backend/libinput/events.c
index f032b4a5..e52dbd95 100644
--- a/backend/libinput/events.c
+++ b/backend/libinput/events.c
@@ -24,7 +24,7 @@ void destroy_libinput_input_device(struct wlr_libinput_input_device *dev) {
wlr_switch_finish(&dev->switch_device);
}
if (dev->touch.impl) {
- wlr_touch_destroy(&dev->touch);
+ wlr_touch_finish(&dev->touch);
}
if (dev->tablet.impl) {
finish_device_tablet(dev);
diff --git a/backend/libinput/touch.c b/backend/libinput/touch.c
index 5b4dcbd6..481a5787 100644
--- a/backend/libinput/touch.c
+++ b/backend/libinput/touch.c
@@ -4,12 +4,8 @@
#include "backend/libinput.h"
#include "util/signal.h"
-static void touch_destroy(struct wlr_touch *touch) {
- /* wlr_touch belongs to the wlr_libinput_input_device */
-}
-
const struct wlr_touch_impl libinput_touch_impl = {
- .destroy = touch_destroy,
+ .name = "libinput-touch",
};
void init_device_touch(struct wlr_libinput_input_device *dev) {
diff --git a/backend/wayland/seat.c b/backend/wayland/seat.c
index cf1bba91..de756d80 100644
--- a/backend/wayland/seat.c
+++ b/backend/wayland/seat.c
@@ -567,6 +567,10 @@ void destroy_wl_input_device(struct wlr_wl_input_device *dev) {
wlr_tablet_finish(wlr_dev->tablet);
free(wlr_dev->tablet);
break;
+ case WLR_INPUT_DEVICE_TOUCH:
+ wlr_touch_finish(wlr_dev->touch);
+ free(wlr_dev->touch);
+ break;
default:
wlr_input_device_destroy(wlr_dev);
break;
diff --git a/backend/x11/input_device.c b/backend/x11/input_device.c
index 9182ba8e..77edf8ad 100644
--- a/backend/x11/input_device.c
+++ b/backend/x11/input_device.c
@@ -293,12 +293,8 @@ const struct wlr_pointer_impl x11_pointer_impl = {
.name = "x11-pointer",
};
-static void touch_destroy(struct wlr_touch *wlr_touch) {
- // Don't free the touch, it's on the stack
-}
-
const struct wlr_touch_impl x11_touch_impl = {
- .destroy = touch_destroy,
+ .name = "x11-touch",
};
void update_x11_pointer_position(struct wlr_x11_output *output,
diff --git a/backend/x11/output.c b/backend/x11/output.c
index 24c08fce..1b51b629 100644
--- a/backend/x11/output.c
+++ b/backend/x11/output.c
@@ -77,7 +77,7 @@ static void output_destroy(struct wlr_output *wlr_output) {
pixman_region32_fini(&output->exposed);
wlr_pointer_finish(&output->pointer);
- wlr_touch_destroy(&output->touch);
+ wlr_touch_finish(&output->touch);
struct wlr_x11_buffer *buffer, *buffer_tmp;
wl_list_for_each_safe(buffer, buffer_tmp, &output->buffers, link) {
diff --git a/include/wlr/interfaces/wlr_touch.h b/include/wlr/interfaces/wlr_touch.h
index 2b95d2bf..e48a92f2 100644
--- a/include/wlr/interfaces/wlr_touch.h
+++ b/include/wlr/interfaces/wlr_touch.h
@@ -12,11 +12,11 @@
#include <wlr/types/wlr_touch.h>
struct wlr_touch_impl {
- void (*destroy)(struct wlr_touch *touch);
+ const char *name;
};
void wlr_touch_init(struct wlr_touch *touch,
const struct wlr_touch_impl *impl, const char *name);
-void wlr_touch_destroy(struct wlr_touch *touch);
+void wlr_touch_finish(struct wlr_touch *touch);
#endif
diff --git a/types/wlr_input_device.c b/types/wlr_input_device.c
index 067c0b0d..69c1536a 100644
--- a/types/wlr_input_device.c
+++ b/types/wlr_input_device.c
@@ -2,7 +2,6 @@
#include <stdlib.h>
#include <string.h>
#include <wayland-server-core.h>
-#include <wlr/interfaces/wlr_touch.h>
#include <wlr/types/wlr_input_device.h>
#include <wlr/util/log.h>
#include "util/signal.h"
@@ -45,7 +44,7 @@ void wlr_input_device_destroy(struct wlr_input_device *dev) {
wlr_log(WLR_ERROR, "wlr_switch will not be destroyed");
break;
case WLR_INPUT_DEVICE_TOUCH:
- wlr_touch_destroy(dev->touch);
+ wlr_log(WLR_ERROR, "wlr_touch will not be destroyed");
break;
case WLR_INPUT_DEVICE_TABLET_TOOL:
wlr_log(WLR_ERROR, "wlr_tablet_tool will not be destroyed");
diff --git a/types/wlr_touch.c b/types/wlr_touch.c
index 36619110..de288347 100644
--- a/types/wlr_touch.c
+++ b/types/wlr_touch.c
@@ -17,11 +17,6 @@ void wlr_touch_init(struct wlr_touch *touch,
wl_signal_init(&touch->events.frame);
}
-void wlr_touch_destroy(struct wlr_touch *touch) {
+void wlr_touch_finish(struct wlr_touch *touch) {
wlr_input_device_finish(&touch->base);
- if (touch && touch->impl && touch->impl->destroy) {
- touch->impl->destroy(touch);
- } else {
- free(touch);
- }
}