From 2a3c62b4d28ec7a69473e9c18c42f1ed26c74bbf Mon Sep 17 00:00:00 2001
From: Ryan Walklin <ryan@testtoast.com>
Date: Wed, 14 Nov 2018 23:24:55 +0000
Subject: [WIP][DONTMERGE]Add support for libinput_switch input devices

These are used primarily by laptops to signal
the state of the lid (open/closed) and tablet
mode if supported, based on ACPI events.
---
 include/wlr/interfaces/meson.build   |  1 +
 include/wlr/interfaces/wlr_switch.h  | 22 +++++++++++++++++
 include/wlr/types/meson.build        |  1 +
 include/wlr/types/wlr_input_device.h |  3 +++
 include/wlr/types/wlr_switch.h       | 46 ++++++++++++++++++++++++++++++++++++
 5 files changed, 73 insertions(+)
 create mode 100644 include/wlr/interfaces/wlr_switch.h
 create mode 100644 include/wlr/types/wlr_switch.h

(limited to 'include/wlr')

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..52b631b5
--- /dev/null
+++ b/include/wlr/types/wlr_switch.h
@@ -0,0 +1,46 @@
+/*
+ * 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 = 1,
+};
+
+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
-- 
cgit v1.2.3