multi-seat: re-enable mouse button+motion reporting support

This commit is contained in:
Daniel Eklöf 2020-07-08 18:16:43 +02:00
parent be2490022d
commit 58415428cf
No known key found for this signature in database
GPG key ID: 5BBD4992C116573F
3 changed files with 47 additions and 38 deletions

22
input.c
View file

@ -1020,7 +1020,8 @@ wl_pointer_motion(void *data, struct wl_pointer *wl_pointer,
selection_update(term, col, row); selection_update(term, col, row);
term_mouse_motion( term_mouse_motion(
term, seat->mouse.button, seat->mouse.row, seat->mouse.col); term, seat->mouse.button, seat->mouse.row, seat->mouse.col,
seat->kbd.shift, seat->kbd.alt, seat->kbd.ctrl);
break; break;
} }
} }
@ -1232,7 +1233,9 @@ wl_pointer_button(void *data, struct wl_pointer *wl_pointer,
} }
} }
term_mouse_down(term, button, seat->mouse.row, seat->mouse.col); term_mouse_down(
term, button, seat->mouse.row, seat->mouse.col,
seat->kbd.shift, seat->kbd.alt, seat->kbd.ctrl);
break; break;
} }
@ -1240,7 +1243,9 @@ wl_pointer_button(void *data, struct wl_pointer *wl_pointer,
if (button == BTN_LEFT && term->selection.end.col != -1) if (button == BTN_LEFT && term->selection.end.col != -1)
selection_finalize(term, serial); selection_finalize(term, serial);
term_mouse_up(term, button, seat->mouse.row, seat->mouse.col); term_mouse_up(
term, button, seat->mouse.row, seat->mouse.col,
seat->kbd.shift, seat->kbd.alt, seat->kbd.ctrl);
break; break;
} }
break; break;
@ -1288,9 +1293,14 @@ mouse_scroll(struct seat *seat, int amount)
keyboard_key(seat, NULL, seat->input_serial, 0, key - 8, XKB_KEY_DOWN); keyboard_key(seat, NULL, seat->input_serial, 0, key - 8, XKB_KEY_DOWN);
keyboard_key(seat, NULL, seat->input_serial, 0, key - 8, XKB_KEY_UP); keyboard_key(seat, NULL, seat->input_serial, 0, key - 8, XKB_KEY_UP);
} else { } else {
for (int i = 0; i < amount; i++) for (int i = 0; i < amount; i++) {
term_mouse_down(term, button, seat->mouse.row, seat->mouse.col); term_mouse_down(
term_mouse_up(term, button, seat->mouse.row, seat->mouse.col); term, button, seat->mouse.row, seat->mouse.col,
seat->kbd.shift, seat->kbd.alt, seat->kbd.ctrl);
}
term_mouse_up(
term, button, seat->mouse.row, seat->mouse.col,
seat->kbd.shift, seat->kbd.alt, seat->kbd.ctrl);
scrollback(term, amount); scrollback(term, amount);
} }

View file

@ -1975,7 +1975,6 @@ term_kbd_focus_out(struct terminal *term)
term_to_slave(term, "\033[O", 3); term_to_slave(term, "\033[O", 3);
} }
#if 0
static int static int
linux_mouse_button_to_x(int button) linux_mouse_button_to_x(int button)
{ {
@ -1994,8 +1993,7 @@ linux_mouse_button_to_x(int button)
return -1; return -1;
} }
} }
#endif
#if 0
static int static int
encode_xbutton(int xbutton) encode_xbutton(int xbutton)
{ {
@ -2020,8 +2018,7 @@ encode_xbutton(int xbutton)
return -1; return -1;
} }
} }
#endif
#if 0
static void static void
report_mouse_click(struct terminal *term, int encoded_button, int row, int col, report_mouse_click(struct terminal *term, int encoded_button, int row, int col,
bool release) bool release)
@ -2057,14 +2054,13 @@ report_mouse_click(struct terminal *term, int encoded_button, int row, int col,
term_to_slave(term, response, strlen(response)); term_to_slave(term, response, strlen(response));
} }
#endif
#if 0
static void static void
report_mouse_motion(struct terminal *term, int encoded_button, int row, int col) report_mouse_motion(struct terminal *term, int encoded_button, int row, int col)
{ {
report_mouse_click(term, encoded_button, row, col, false); report_mouse_click(term, encoded_button, row, col, false);
} }
#endif
bool bool
term_mouse_grabbed(const struct terminal *term) term_mouse_grabbed(const struct terminal *term)
{ {
@ -2085,9 +2081,9 @@ term_mouse_grabbed(const struct terminal *term)
} }
void void
term_mouse_down(struct terminal *term, int button, int row, int col) term_mouse_down(struct terminal *term, int button, int row, int col,
bool _shift, bool _alt, bool _ctrl)
{ {
#if 0
if (term_mouse_grabbed(term)) if (term_mouse_grabbed(term))
return; return;
@ -2101,10 +2097,10 @@ term_mouse_down(struct terminal *term, int button, int row, int col)
return; return;
bool has_focus = term->wl->kbd_focus == term; bool has_focus = term_has_kbd_focus(term);
bool shift = has_focus ? term->wl->kbd.shift : false; bool shift = has_focus ? _shift : false;
bool alt = has_focus ? term->wl->kbd.alt : false; bool alt = has_focus ? _alt : false;
bool ctrl = has_focus ? term->wl->kbd.ctrl : false; bool ctrl = has_focus ? _ctrl : false;
encoded += (shift ? 4 : 0) + (alt ? 8 : 0) + (ctrl ? 16 : 0); encoded += (shift ? 4 : 0) + (alt ? 8 : 0) + (ctrl ? 16 : 0);
@ -2123,13 +2119,12 @@ term_mouse_down(struct terminal *term, int button, int row, int col)
assert(false && "unimplemented"); assert(false && "unimplemented");
break; break;
} }
#endif
} }
void void
term_mouse_up(struct terminal *term, int button, int row, int col) term_mouse_up(struct terminal *term, int button, int row, int col,
bool _shift, bool _alt, bool _ctrl)
{ {
#if 0
if (term_mouse_grabbed(term)) if (term_mouse_grabbed(term))
return; return;
@ -2147,10 +2142,10 @@ term_mouse_up(struct terminal *term, int button, int row, int col)
if (encoded == -1) if (encoded == -1)
return; return;
bool has_focus = term->wl->kbd_focus == term; bool has_focus = term_has_kbd_focus(term);
bool shift = has_focus ? term->wl->kbd.shift : false; bool shift = has_focus ? _shift : false;
bool alt = has_focus ? term->wl->kbd.alt : false; bool alt = has_focus ? _alt : false;
bool ctrl = has_focus ? term->wl->kbd.ctrl : false; bool ctrl = has_focus ? _ctrl : false;
encoded += (shift ? 4 : 0) + (alt ? 8 : 0) + (ctrl ? 16 : 0); encoded += (shift ? 4 : 0) + (alt ? 8 : 0) + (ctrl ? 16 : 0);
@ -2169,13 +2164,12 @@ term_mouse_up(struct terminal *term, int button, int row, int col)
assert(false && "unimplemented"); assert(false && "unimplemented");
break; break;
} }
#endif
} }
void void
term_mouse_motion(struct terminal *term, int button, int row, int col) term_mouse_motion(struct terminal *term, int button, int row, int col,
bool _shift, bool _alt, bool _ctrl)
{ {
#if 0
if (term_mouse_grabbed(term)) if (term_mouse_grabbed(term))
return; return;
@ -2193,10 +2187,10 @@ term_mouse_motion(struct terminal *term, int button, int row, int col)
} else } else
encoded = 3; /* "released" */ encoded = 3; /* "released" */
bool has_focus = term->wl->kbd_focus == term; bool has_focus = term_has_kbd_focus(term);
bool shift = has_focus ? term->wl->kbd.shift : false; bool shift = has_focus ? _shift : false;
bool alt = has_focus ? term->wl->kbd.alt : false; bool alt = has_focus ? _alt : false;
bool ctrl = has_focus ? term->wl->kbd.ctrl : false; bool ctrl = has_focus ? _ctrl : false;
encoded += 32; /* Motion event */ encoded += 32; /* Motion event */
encoded += (shift ? 4 : 0) + (alt ? 8 : 0) + (ctrl ? 16 : 0); encoded += (shift ? 4 : 0) + (alt ? 8 : 0) + (ctrl ? 16 : 0);
@ -2220,7 +2214,6 @@ term_mouse_motion(struct terminal *term, int button, int row, int col)
assert(false && "unimplemented"); assert(false && "unimplemented");
break; break;
} }
#endif
} }
void void

View file

@ -509,9 +509,15 @@ void term_visual_focus_out(struct terminal *term);
bool term_has_kbd_focus(struct terminal *term); bool term_has_kbd_focus(struct terminal *term);
void term_kbd_focus_in(struct terminal *term); void term_kbd_focus_in(struct terminal *term);
void term_kbd_focus_out(struct terminal *term); void term_kbd_focus_out(struct terminal *term);
void term_mouse_down(struct terminal *term, int button, int row, int col); void term_mouse_down(
void term_mouse_up(struct terminal *term, int button, int row, int col); struct terminal *term, int button, int row, int col,
void term_mouse_motion(struct terminal *term, int button, int row, int col); bool shift, bool alt, bool ctrl);
void term_mouse_up(
struct terminal *term, int button, int row, int col,
bool shift, bool alt, bool ctrl);
void term_mouse_motion(
struct terminal *term, int button, int row, int col,
bool shift, bool alt, bool ctrl);
bool term_mouse_grabbed(const struct terminal *term); bool term_mouse_grabbed(const struct terminal *term);
void term_xcursor_update(struct terminal *term); void term_xcursor_update(struct terminal *term);