diff --git a/input.c b/input.c index 9e3ad64e..96fcaf4c 100644 --- a/input.c +++ b/input.c @@ -433,7 +433,7 @@ wl_pointer_button(void *data, struct wl_pointer *wl_pointer, break; } } else { - if (term->mouse.count == 1 && button == BTN_MIDDLE) + if (term->mouse.count == 1 && button == BTN_MIDDLE && selection_enabled(term)) selection_from_primary(term); selection_cancel(term); } diff --git a/selection.c b/selection.c index 586b1c3d..8dd00da0 100644 --- a/selection.c +++ b/selection.c @@ -17,7 +17,7 @@ #define min(x, y) ((x) < (y) ? (x) : (y)) #define max(x, y) ((x) > (y) ? (x) : (y)) -static bool +bool selection_enabled(const struct terminal *term) { return term->mouse_tracking == MOUSE_NONE || term->kbd.shift; diff --git a/selection.h b/selection.h index 8622c04a..d7b96d01 100644 --- a/selection.h +++ b/selection.h @@ -8,6 +8,7 @@ extern const struct wl_data_device_listener data_device_listener; extern const struct zwp_primary_selection_device_v1_listener primary_selection_device_listener; +bool selection_enabled(const struct terminal *term); void selection_start(struct terminal *term, int col, int row); void selection_update(struct terminal *term, int col, int row); void selection_finalize(struct terminal *term, uint32_t serial);