mirror of
https://github.com/DreamMaoMao/maomaowm.git
synced 2026-03-24 09:06:31 -04:00
fix: tablet pen press not focusing windows
This commit is contained in:
parent
667e69443d
commit
abdfc56a2f
2 changed files with 30 additions and 17 deletions
|
|
@ -217,15 +217,22 @@ void tablettoolbutton(struct wl_listener *listener, void *data) {
|
||||||
void tablettooltip(struct wl_listener *listener, void *data) {
|
void tablettooltip(struct wl_listener *listener, void *data) {
|
||||||
struct wlr_tablet_tool_tip_event *event = data;
|
struct wlr_tablet_tool_tip_event *event = data;
|
||||||
|
|
||||||
|
struct wlr_pointer_button_event fakeptrbtnevent = {
|
||||||
|
.button = BTN_LEFT,
|
||||||
|
.state = event->state == WLR_TABLET_TOOL_TIP_UP
|
||||||
|
? WL_POINTER_BUTTON_STATE_RELEASED
|
||||||
|
: WL_POINTER_BUTTON_STATE_PRESSED,
|
||||||
|
.time_msec = event->time_msec,
|
||||||
|
};
|
||||||
|
|
||||||
|
if (handle_buttonpress(&fakeptrbtnevent))
|
||||||
|
return;
|
||||||
|
|
||||||
if (!tablet_curr_surface) {
|
if (!tablet_curr_surface) {
|
||||||
struct wlr_pointer_button_event fakeptrbtnevent = {
|
wlr_seat_pointer_notify_button(seat, fakeptrbtnevent.time_msec,
|
||||||
.button = BTN_LEFT,
|
fakeptrbtnevent.button,
|
||||||
.state = event->state == WLR_TABLET_TOOL_TIP_UP
|
fakeptrbtnevent.state);
|
||||||
? WL_POINTER_BUTTON_STATE_RELEASED
|
return;
|
||||||
: WL_POINTER_BUTTON_STATE_PRESSED,
|
|
||||||
.time_msec = event->time_msec,
|
|
||||||
};
|
|
||||||
buttonpress(NULL, (void *)&fakeptrbtnevent);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (event->state == WLR_TABLET_TOOL_TIP_UP) {
|
if (event->state == WLR_TABLET_TOOL_TIP_UP) {
|
||||||
|
|
|
||||||
24
src/mango.c
24
src/mango.c
|
|
@ -573,6 +573,7 @@ static void axisnotify(struct wl_listener *listener,
|
||||||
void *data); // 滚轮事件处理
|
void *data); // 滚轮事件处理
|
||||||
static void buttonpress(struct wl_listener *listener,
|
static void buttonpress(struct wl_listener *listener,
|
||||||
void *data); // 鼠标按键事件处理
|
void *data); // 鼠标按键事件处理
|
||||||
|
static bool handle_buttonpress(struct wlr_pointer_button_event *event);
|
||||||
static int32_t ongesture(struct wlr_pointer_swipe_end_event *event);
|
static int32_t ongesture(struct wlr_pointer_swipe_end_event *event);
|
||||||
static void swipe_begin(struct wl_listener *listener, void *data);
|
static void swipe_begin(struct wl_listener *listener, void *data);
|
||||||
static void swipe_update(struct wl_listener *listener, void *data);
|
static void swipe_update(struct wl_listener *listener, void *data);
|
||||||
|
|
@ -1998,6 +1999,13 @@ bool check_trackpad_disabled(struct wlr_pointer *pointer) {
|
||||||
void // 鼠标按键事件
|
void // 鼠标按键事件
|
||||||
buttonpress(struct wl_listener *listener, void *data) {
|
buttonpress(struct wl_listener *listener, void *data) {
|
||||||
struct wlr_pointer_button_event *event = data;
|
struct wlr_pointer_button_event *event = data;
|
||||||
|
|
||||||
|
if (!handle_buttonpress(event))
|
||||||
|
wlr_seat_pointer_notify_button(seat, event->time_msec, event->button,
|
||||||
|
event->state);
|
||||||
|
}
|
||||||
|
|
||||||
|
bool handle_buttonpress(struct wlr_pointer_button_event *event) {
|
||||||
struct wlr_keyboard *hard_keyboard, *keyboard;
|
struct wlr_keyboard *hard_keyboard, *keyboard;
|
||||||
uint32_t hard_mods, mods;
|
uint32_t hard_mods, mods;
|
||||||
Client *c = NULL;
|
Client *c = NULL;
|
||||||
|
|
@ -2013,7 +2021,7 @@ buttonpress(struct wl_listener *listener, void *data) {
|
||||||
wlr_idle_notifier_v1_notify_activity(idle_notifier, seat);
|
wlr_idle_notifier_v1_notify_activity(idle_notifier, seat);
|
||||||
|
|
||||||
if (check_trackpad_disabled(event->pointer)) {
|
if (check_trackpad_disabled(event->pointer)) {
|
||||||
return;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
switch (event->state) {
|
switch (event->state) {
|
||||||
|
|
@ -2060,12 +2068,12 @@ buttonpress(struct wl_listener *listener, void *data) {
|
||||||
|
|
||||||
if (selmon->isoverview && event->button == BTN_LEFT && c) {
|
if (selmon->isoverview && event->button == BTN_LEFT && c) {
|
||||||
toggleoverview(&(Arg){.i = 1});
|
toggleoverview(&(Arg){.i = 1});
|
||||||
return;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (selmon->isoverview && event->button == BTN_RIGHT && c) {
|
if (selmon->isoverview && event->button == BTN_RIGHT && c) {
|
||||||
pending_kill_client(c);
|
pending_kill_client(c);
|
||||||
return;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (CLEANMASK(mods) == CLEANMASK(m->mod) &&
|
if (CLEANMASK(mods) == CLEANMASK(m->mod) &&
|
||||||
|
|
@ -2073,7 +2081,7 @@ buttonpress(struct wl_listener *listener, void *data) {
|
||||||
(CLEANMASK(m->mod) != 0 ||
|
(CLEANMASK(m->mod) != 0 ||
|
||||||
(event->button != BTN_LEFT && event->button != BTN_RIGHT))) {
|
(event->button != BTN_LEFT && event->button != BTN_RIGHT))) {
|
||||||
m->func(&m->arg);
|
m->func(&m->arg);
|
||||||
return;
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
@ -2105,16 +2113,14 @@ buttonpress(struct wl_listener *listener, void *data) {
|
||||||
apply_window_snap(tmpc);
|
apply_window_snap(tmpc);
|
||||||
}
|
}
|
||||||
tmpc->drag_to_tile = false;
|
tmpc->drag_to_tile = false;
|
||||||
return;
|
return true;
|
||||||
} else {
|
} else {
|
||||||
cursor_mode = CurNormal;
|
cursor_mode = CurNormal;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
/* If the event wasn't handled by the compositor, notify the client with
|
/* If the event wasn't handled by the compositor, return false */
|
||||||
* pointer focus that a button press has occurred */
|
return false;
|
||||||
wlr_seat_pointer_notify_button(seat, event->time_msec, event->button,
|
|
||||||
event->state);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void checkidleinhibitor(struct wlr_surface *exclude) {
|
void checkidleinhibitor(struct wlr_surface *exclude) {
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue