term: add term_mouse_grabbed()

When this returns true, it means we have keyboard focus and are
grabbing the mouse (for e.g. selections), regardless of whether the
client has enabled mouse tracking or not.
This commit is contained in:
Daniel Eklöf 2019-11-30 17:06:15 +01:00
parent 5d2b2dc8a7
commit 2208f4304b
No known key found for this signature in database
GPG key ID: 5BBD4992C116573F
3 changed files with 17 additions and 30 deletions

View file

@ -21,23 +21,12 @@
#define min(x, y) ((x) < (y) ? (x) : (y))
#define max(x, y) ((x) > (y) ? (x) : (y))
static bool
selection_forced(const struct terminal *term)
{
const struct wayland *wayl = term->wl;
return wayl->focused == term &&
wayl->kbd.shift &&
!wayl->kbd.alt &&
!wayl->kbd.ctrl &&
!wayl->kbd.meta;
}
bool
selection_enabled(const struct terminal *term)
{
return
term->mouse_tracking == MOUSE_NONE ||
selection_forced(term) ||
term_mouse_grabbed(term) ||
term->is_searching;
}

View file

@ -1309,17 +1309,24 @@ report_mouse_motion(struct terminal *term, int encoded_button, int row, int col)
report_mouse_click(term, encoded_button, row, col, false);
}
bool
term_mouse_grabbed(const struct terminal *term)
{
/*
* Mouse is grabbed by us, regardless of whether mouse tracking has been enabled or not.
*/
return
term->wl->focused == term &&
term->wl->kbd.shift &&
!term->wl->kbd.alt && !term->wl->kbd.ctrl && !term->wl->kbd.meta;
}
void
term_mouse_down(struct terminal *term, int button, int row, int col,
bool shift, bool alt, bool ctrl)
{
if (term->wl->focused == term &&
term->wl->kbd.shift &&
!term->wl->kbd.alt && !term->wl->kbd.ctrl && !term->wl->kbd.meta)
{
/* "raw" mouse mode */
if (term_mouse_grabbed(term))
return;
}
/* Map libevent button event code to X button number */
int xbutton = linux_mouse_button_to_x(button);
@ -1353,13 +1360,8 @@ void
term_mouse_up(struct terminal *term, int button, int row, int col,
bool shift, bool alt, bool ctrl)
{
if (term->wl->focused == term &&
term->wl->kbd.shift &&
!term->wl->kbd.alt && !term->wl->kbd.ctrl && !term->wl->kbd.meta)
{
/* "raw" mouse mode */
if (term_mouse_grabbed(term))
return;
}
/* Map libevent button event code to X button number */
int xbutton = linux_mouse_button_to_x(button);
@ -1398,13 +1400,8 @@ void
term_mouse_motion(struct terminal *term, int button, int row, int col,
bool shift, bool alt, bool ctrl)
{
if (term->wl->focused == term &&
term->wl->kbd.shift &&
!term->wl->kbd.alt && !term->wl->kbd.ctrl && !term->wl->kbd.meta)
{
/* "raw" mouse mode */
if (term_mouse_grabbed(term))
return;
}
int encoded = 0;

View file

@ -366,6 +366,7 @@ 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);
void term_xcursor_update(struct terminal *term);
void term_set_window_title(struct terminal *term, const char *title);