aboutsummaryrefslogtreecommitdiff
path: root/include
diff options
context:
space:
mode:
authoremersion <contact@emersion.fr>2018-12-15 19:54:25 +0100
committerGitHub <noreply@github.com>2018-12-15 19:54:25 +0100
commit6d4bfa3226123e958ff2bdc4f226489cba49f84d (patch)
tree256c7c3ded68d4b95ed09f7a2fbfd5bc67dbcee9 /include
parent8a56b96c5516ee089b7561949aac4f83e5b94808 (diff)
parentf8129ecbc5147a62d93d6bac5e61e5ce79d89667 (diff)
Merge pull request #1377 from tokyovigilante/switch-events
Add support for libinput_switch input devices
Diffstat (limited to 'include')
-rw-r--r--include/backend/libinput.h5
-rw-r--r--include/rootston/bindings.h9
-rw-r--r--include/rootston/config.h10
-rw-r--r--include/rootston/seat.h2
-rw-r--r--include/rootston/switch.h18
-rw-r--r--include/wlr/interfaces/meson.build1
-rw-r--r--include/wlr/interfaces/wlr_switch.h22
-rw-r--r--include/wlr/types/meson.build1
-rw-r--r--include/wlr/types/wlr_input_device.h3
-rw-r--r--include/wlr/types/wlr_switch.h47
10 files changed, 118 insertions, 0 deletions
diff --git a/include/backend/libinput.h b/include/backend/libinput.h
index 9531091f..f4886956 100644
--- a/include/backend/libinput.h
+++ b/include/backend/libinput.h
@@ -55,6 +55,11 @@ void handle_pointer_button(struct libinput_event *event,
void handle_pointer_axis(struct libinput_event *event,
struct libinput_device *device);
+struct wlr_switch *create_libinput_switch(
+ struct libinput_device *device);
+void handle_switch_toggle(struct libinput_event *event,
+ struct libinput_device *device);
+
struct wlr_touch *create_libinput_touch(
struct libinput_device *device);
void handle_touch_down(struct libinput_event *event,
diff --git a/include/rootston/bindings.h b/include/rootston/bindings.h
new file mode 100644
index 00000000..db38130b
--- /dev/null
+++ b/include/rootston/bindings.h
@@ -0,0 +1,9 @@
+#ifndef ROOTSTON_BINDINGS_H
+#define ROOTSTON_BINDINGS_H
+
+#include "rootston/seat.h"
+#include "rootston/input.h"
+
+void execute_binding_command(struct roots_seat *seat, struct roots_input *input, const char *command);
+
+#endif //ROOTSTON_BINDINGS_H
diff --git a/include/rootston/config.h b/include/rootston/config.h
index 86699c6a..f8132269 100644
--- a/include/rootston/config.h
+++ b/include/rootston/config.h
@@ -3,6 +3,7 @@
#include <xf86drmMode.h>
#include <wlr/types/wlr_input_device.h>
+#include <wlr/types/wlr_switch.h>
#include <wlr/types/wlr_output_layout.h>
#define ROOTS_CONFIG_DEFAULT_SEAT_NAME "seat0"
@@ -65,6 +66,14 @@ struct roots_cursor_config {
struct wl_list link;
};
+struct roots_switch_config {
+ char *name;
+ enum wlr_switch_type switch_type;
+ enum wlr_switch_state switch_state;
+ char *command;
+ struct wl_list link;
+};
+
struct roots_config {
bool xwayland;
bool xwayland_lazy;
@@ -74,6 +83,7 @@ struct roots_config {
struct wl_list bindings;
struct wl_list keyboards;
struct wl_list cursors;
+ struct wl_list switches;
char *config_path;
char *startup_cmd;
diff --git a/include/rootston/seat.h b/include/rootston/seat.h
index 0187c6cc..105ba3aa 100644
--- a/include/rootston/seat.h
+++ b/include/rootston/seat.h
@@ -5,6 +5,7 @@
#include "rootston/input.h"
#include "rootston/keyboard.h"
#include "rootston/layers.h"
+#include "rootston/switch.h"
#include "rootston/text_input.h"
struct roots_seat {
@@ -32,6 +33,7 @@ struct roots_seat {
struct wl_list keyboards;
struct wl_list pointers;
+ struct wl_list switches;
struct wl_list touch;
struct wl_list tablets;
struct wl_list tablet_pads;
diff --git a/include/rootston/switch.h b/include/rootston/switch.h
new file mode 100644
index 00000000..28197774
--- /dev/null
+++ b/include/rootston/switch.h
@@ -0,0 +1,18 @@
+#ifndef ROOTSTON_SWITCH_H
+#define ROOTSTON_SWITCH_H
+
+#include "rootston/input.h"
+
+struct roots_switch {
+ struct roots_seat *seat;
+ struct wlr_input_device *device;
+ struct wl_listener device_destroy;
+
+ struct wl_listener toggle;
+ struct wl_list link;
+};
+
+void roots_switch_handle_toggle(struct roots_switch *lid_switch,
+ struct wlr_event_switch_toggle *event);
+
+#endif // ROOTSTON_SWITCH_H
diff --git a/include/wlr/interfaces/meson.build b/include/wlr/interfaces/meson.build
index 207896b5..7d4d811d 100644
--- a/include/wlr/interfaces/meson.build
+++ b/include/wlr/interfaces/meson.build
@@ -3,6 +3,7 @@ install_headers(
'wlr_keyboard.h',
'wlr_output.h',
'wlr_pointer.h',
+ 'wlr_switch.h',
'wlr_tablet_pad.h',
'wlr_tablet_tool.h',
'wlr_touch.h',
diff --git a/include/wlr/interfaces/wlr_switch.h b/include/wlr/interfaces/wlr_switch.h
new file mode 100644
index 00000000..0b0454f5
--- /dev/null
+++ b/include/wlr/interfaces/wlr_switch.h
@@ -0,0 +1,22 @@
+/*
+ * This an unstable interface of wlroots. No guarantees are made regarding the
+ * future consistency of this API.
+ */
+#ifndef WLR_USE_UNSTABLE
+#error "Add -DWLR_USE_UNSTABLE to enable unstable wlroots features"
+#endif
+
+#ifndef WLR_INTERFACES_WLR_SWITCH_H
+#define WLR_INTERFACES_WLR_SWITCH_H
+
+#include <wlr/types/wlr_switch.h>
+
+struct wlr_switch_impl {
+ void (*destroy)(struct wlr_switch *lid_switch);
+};
+
+void wlr_switch_init(struct wlr_switch *lid_switch,
+ struct wlr_switch_impl *impl);
+void wlr_switch_destroy(struct wlr_switch *lid_switch);
+
+#endif
diff --git a/include/wlr/types/meson.build b/include/wlr/types/meson.build
index e2ce86e3..752c0dea 100644
--- a/include/wlr/types/meson.build
+++ b/include/wlr/types/meson.build
@@ -32,6 +32,7 @@ install_headers(
'wlr_seat.h',
'wlr_server_decoration.h',
'wlr_surface.h',
+ 'wlr_switch.h',
'wlr_tablet_pad.h',
'wlr_tablet_tool.h',
'wlr_tablet_v2.h',
diff --git a/include/wlr/types/wlr_input_device.h b/include/wlr/types/wlr_input_device.h
index ab0aecb6..f948d55b 100644
--- a/include/wlr/types/wlr_input_device.h
+++ b/include/wlr/types/wlr_input_device.h
@@ -20,6 +20,7 @@ enum wlr_input_device_type {
WLR_INPUT_DEVICE_TOUCH,
WLR_INPUT_DEVICE_TABLET_TOOL,
WLR_INPUT_DEVICE_TABLET_PAD,
+ WLR_INPUT_DEVICE_SWITCH,
};
/* Note: these are circular dependencies */
@@ -28,6 +29,7 @@ enum wlr_input_device_type {
#include <wlr/types/wlr_touch.h>
#include <wlr/types/wlr_tablet_tool.h>
#include <wlr/types/wlr_tablet_pad.h>
+#include <wlr/types/wlr_switch.h>
struct wlr_input_device_impl;
@@ -46,6 +48,7 @@ struct wlr_input_device {
void *_device;
struct wlr_keyboard *keyboard;
struct wlr_pointer *pointer;
+ struct wlr_switch *lid_switch;
struct wlr_touch *touch;
struct wlr_tablet *tablet;
struct wlr_tablet_pad *tablet_pad;
diff --git a/include/wlr/types/wlr_switch.h b/include/wlr/types/wlr_switch.h
new file mode 100644
index 00000000..df1c8579
--- /dev/null
+++ b/include/wlr/types/wlr_switch.h
@@ -0,0 +1,47 @@
+/*
+ * This an unstable interface of wlroots. No guarantees are made regarding the
+ * future consistency of this API.
+ */
+#ifndef WLR_USE_UNSTABLE
+#error "Add -DWLR_USE_UNSTABLE to enable unstable wlroots features"
+#endif
+
+#ifndef WLR_TYPES_WLR_SWITCH_H
+#define WLR_TYPES_WLR_SWITCH_H
+
+#include <stdint.h>
+#include <wayland-server.h>
+#include <wlr/types/wlr_input_device.h>
+#include <wlr/types/wlr_list.h>
+
+struct wlr_switch_impl;
+
+struct wlr_switch {
+ struct wlr_switch_impl *impl;
+
+ struct {
+ struct wl_signal toggle;
+ } events;
+
+ void *data;
+};
+
+enum wlr_switch_type {
+ WLR_SWITCH_TYPE_LID = 1,
+ WLR_SWITCH_TYPE_TABLET_MODE,
+};
+
+enum wlr_switch_state {
+ WLR_SWITCH_STATE_OFF = 0,
+ WLR_SWITCH_STATE_ON,
+ WLR_SWITCH_STATE_TOGGLE
+};
+
+struct wlr_event_switch_toggle {
+ struct wlr_input_device *device;
+ uint32_t time_msec;
+ enum wlr_switch_type switch_type;
+ enum wlr_switch_state switch_state;
+};
+
+#endif