~ruther/dwl

1eeb3689d3ec5b917b5ccf730a6497e4b9fcd0a6 — Leonardo Hernández Hernández 2 years ago 434ed11
add support for the ext-idle-notify-v1 protocol

for now we use macros to support both KDE idle and ext-idle, wlroots will
likely drop support for KDE idle in 0.17
1 files changed, 9 insertions(+), 4 deletions(-)

M dwl.c
M dwl.c => dwl.c +9 -4
@@ 24,6 24,7 @@
#include <wlr/types/wlr_gamma_control_v1.h>
#include <wlr/types/wlr_idle.h>
#include <wlr/types/wlr_idle_inhibit_v1.h>
#include <wlr/types/wlr_idle_notify_v1.h>
#include <wlr/types/wlr_input_device.h>
#include <wlr/types/wlr_input_inhibitor.h>
#include <wlr/types/wlr_keyboard.h>


@@ 67,6 68,7 @@
#define END(A)                  ((A) + LENGTH(A))
#define TAGMASK                 ((1 << LENGTH(tags)) - 1)
#define LISTEN(E, L, H)         wl_signal_add((E), ((L)->notify = (H), (L)))
#define IDLE_NOTIFY_ACTIVITY    wlr_idle_notify_activity(idle, seat), wlr_idle_notifier_v1_notify_activity(idle_notifier, seat)

/* enums */
enum { CurNormal, CurPressed, CurMove, CurResize }; /* cursor */


@@ 308,6 310,7 @@ static struct wlr_xdg_activation_v1 *activation;
static struct wl_list clients; /* tiling order */
static struct wl_list fstack;  /* focus order */
static struct wlr_idle *idle;
static struct wlr_idle_notifier_v1 *idle_notifier;
static struct wlr_idle_inhibit_manager_v1 *idle_inhibit_mgr;
static struct wlr_input_inhibit_manager *input_inhibit_mgr;
static struct wlr_layer_shell_v1 *layer_shell;


@@ 511,7 514,7 @@ axisnotify(struct wl_listener *listener, void *data)
	/* This event is forwarded by the cursor when a pointer emits an axis event,
	 * for example when you move the scroll wheel. */
	struct wlr_pointer_axis_event *event = data;
	wlr_idle_notify_activity(idle, seat);
	IDLE_NOTIFY_ACTIVITY;
	/* TODO: allow usage of scroll whell for mousebindings, it can be implemented
	 * checking the event's orientation and the delta of the event */
	/* Notify the client with pointer focus of the axis event. */


@@ 529,7 532,7 @@ buttonpress(struct wl_listener *listener, void *data)
	Client *c;
	const Button *b;

	wlr_idle_notify_activity(idle, seat);
	IDLE_NOTIFY_ACTIVITY;

	switch (event->state) {
	case WLR_BUTTON_PRESSED:


@@ 599,6 602,7 @@ checkidleinhibitor(struct wlr_surface *exclude)
	}

	wlr_idle_set_enabled(idle, NULL, !inhibited);
	wlr_idle_notifier_v1_set_inhibited(idle_notifier, inhibited);
}

void


@@ 1239,7 1243,7 @@ keypress(struct wl_listener *listener, void *data)
	int handled = 0;
	uint32_t mods = wlr_keyboard_get_modifiers(kb->wlr_keyboard);

	wlr_idle_notify_activity(idle, seat);
	IDLE_NOTIFY_ACTIVITY;

	/* On _press_ if there is no active screen locker,
	 * attempt to process a compositor keybinding. */


@@ 1403,7 1407,7 @@ motionnotify(uint32_t time)

	/* time is 0 in internal calls meant to restore pointer focus. */
	if (time) {
		wlr_idle_notify_activity(idle, seat);
		IDLE_NOTIFY_ACTIVITY;

		/* Update selmon (even while dragging a window) */
		if (sloppyfocus)


@@ 2029,6 2033,7 @@ setup(void)
	wl_list_init(&fstack);

	idle = wlr_idle_create(dpy);
	idle_notifier = wlr_idle_notifier_v1_create(dpy);

	idle_inhibit_mgr = wlr_idle_inhibit_v1_create(dpy);
	wl_signal_add(&idle_inhibit_mgr->events.new_inhibitor, &idle_inhibitor_create);