mirror of
https://github.com/DreamMaoMao/maomaowm.git
synced 2026-05-03 06:46:38 -04:00
fix: tablet pen press not focusing windows
This commit is contained in:
parent
4e8af666e8
commit
53f6e6c315
2 changed files with 29 additions and 16 deletions
|
|
@ -211,7 +211,6 @@ void tablettoolbutton(struct wl_listener *listener, void *data) {
|
|||
void tablettooltip(struct wl_listener *listener, void *data) {
|
||||
struct wlr_tablet_tool_tip_event *event = data;
|
||||
|
||||
if (!tablet_curr_surface) {
|
||||
struct wlr_pointer_button_event fakeptrbtnevent = {
|
||||
.button = BTN_LEFT,
|
||||
.state = event->state == WLR_TABLET_TOOL_TIP_UP
|
||||
|
|
@ -219,7 +218,15 @@ void tablettooltip(struct wl_listener *listener, void *data) {
|
|||
: WL_POINTER_BUTTON_STATE_PRESSED,
|
||||
.time_msec = event->time_msec,
|
||||
};
|
||||
buttonpress(NULL, (void *)&fakeptrbtnevent);
|
||||
|
||||
if (handle_buttonpress(&fakeptrbtnevent))
|
||||
return;
|
||||
|
||||
if (!tablet_curr_surface) {
|
||||
wlr_seat_pointer_notify_button(seat, fakeptrbtnevent.time_msec,
|
||||
fakeptrbtnevent.button,
|
||||
fakeptrbtnevent.state);
|
||||
return;
|
||||
}
|
||||
|
||||
if (event->state == WLR_TABLET_TOOL_TIP_UP) {
|
||||
|
|
|
|||
22
src/mango.c
22
src/mango.c
|
|
@ -495,6 +495,7 @@ static void axisnotify(struct wl_listener *listener,
|
|||
void *data); // 滚轮事件处理
|
||||
static void buttonpress(struct wl_listener *listener,
|
||||
void *data); // 鼠标按键事件处理
|
||||
static bool handle_buttonpress(struct wlr_pointer_button_event *event);
|
||||
static int ongesture(struct wlr_pointer_swipe_end_event *event);
|
||||
static void swipe_begin(struct wl_listener *listener, void *data);
|
||||
static void swipe_update(struct wl_listener *listener, void *data);
|
||||
|
|
@ -1770,6 +1771,13 @@ bool check_trackpad_disabled(struct wlr_pointer *pointer) {
|
|||
void // 鼠标按键事件
|
||||
buttonpress(struct wl_listener *listener, void *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;
|
||||
unsigned int hard_mods, mods;
|
||||
Client *c;
|
||||
|
|
@ -1785,7 +1793,7 @@ buttonpress(struct wl_listener *listener, void *data) {
|
|||
wlr_idle_notifier_v1_notify_activity(idle_notifier, seat);
|
||||
|
||||
if (check_trackpad_disabled(event->pointer)) {
|
||||
return;
|
||||
return true;
|
||||
}
|
||||
|
||||
switch (event->state) {
|
||||
|
|
@ -1834,12 +1842,12 @@ buttonpress(struct wl_listener *listener, void *data) {
|
|||
event->button == m->button && m->func &&
|
||||
(selmon->isoverview == 1 || m->button == BTN_MIDDLE) && c) {
|
||||
m->func(&m->arg);
|
||||
return;
|
||||
return true;
|
||||
} else if (CLEANMASK(mods) == CLEANMASK(m->mod) &&
|
||||
event->button == m->button && m->func &&
|
||||
CLEANMASK(m->mod) != 0) {
|
||||
m->func(&m->arg);
|
||||
return;
|
||||
return true;
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
|
@ -1870,16 +1878,14 @@ buttonpress(struct wl_listener *listener, void *data) {
|
|||
apply_window_snap(tmpc);
|
||||
}
|
||||
tmpc->drag_to_tile = false;
|
||||
return;
|
||||
return true;
|
||||
} else {
|
||||
cursor_mode = CurNormal;
|
||||
}
|
||||
break;
|
||||
}
|
||||
/* If the event wasn't handled by the compositor, notify the client with
|
||||
* pointer focus that a button press has occurred */
|
||||
wlr_seat_pointer_notify_button(seat, event->time_msec, event->button,
|
||||
event->state);
|
||||
/* If the event wasn't handled by the compositor, return false */
|
||||
return false;
|
||||
}
|
||||
|
||||
void checkidleinhibitor(struct wlr_surface *exclude) {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue