mirror of
https://codeberg.org/dnkl/foot.git
synced 2026-04-08 08:20:59 -04:00
multi-seat: re-enable mouse button+motion reporting support
This commit is contained in:
parent
be2490022d
commit
58415428cf
3 changed files with 47 additions and 38 deletions
22
input.c
22
input.c
|
|
@ -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);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
51
terminal.c
51
terminal.c
|
|
@ -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
|
||||||
|
|
|
||||||
12
terminal.h
12
terminal.h
|
|
@ -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);
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue