core: mouse left release renderer lock made more coarse

This will make our selection gesture extraction a bit easier.
pull/12830/head
Mitchell Hashimoto 2026-05-26 17:00:45 -07:00
parent 14df684a70
commit 33f1558801
No known key found for this signature in database
GPG Key ID: 523D5DC389D273BC
1 changed files with 7 additions and 7 deletions

View File

@ -3796,12 +3796,15 @@ pub fn mouseButtonCallback(
}
if (button == .left and action == .release) {
self.renderer_state.mutex.lock();
defer self.renderer_state.mutex.unlock();
// Stop selection scrolling when releasing the left mouse button
// but only when selection scrolling is active.
if (self.selection_scroll_active) {
self.queueIo(
.{ .selection_scroll = false },
.unlocked,
.locked,
);
}
@ -3809,8 +3812,6 @@ pub fn mouseButtonCallback(
// the left button is released. This is to avoid the clipboard
// being updated on every mouse move which would be noisy.
if (self.config.copy_on_select != .false) {
self.renderer_state.mutex.lock();
defer self.renderer_state.mutex.unlock();
const prev_ = self.io.terminal.screens.active.selection;
if (prev_) |prev| {
try self.setSelection(terminal.Selection.init(
@ -3825,9 +3826,9 @@ pub fn mouseButtonCallback(
// reporting or any other mouse handling because a successfully
// clicked link will swallow the event.
if (self.mouse.over_link) {
// We are holding the renderer lock, but this should just be
// a cached value.
const pos = try self.rt_surface.getCursorPos();
self.renderer_state.mutex.lock();
defer self.renderer_state.mutex.unlock();
if (self.processLinks(pos)) |processed| {
if (processed) return true;
} else |err| {
@ -4105,9 +4106,8 @@ pub fn mouseButtonCallback(
return false;
}
/// Requires the renderer state mutex is held.
fn maybePromptClick(self: *Surface) !bool {
self.renderer_state.mutex.lock();
defer self.renderer_state.mutex.unlock();
const t: *terminal.Terminal = self.renderer_state.terminal;
const screen: *terminal.Screen = t.screens.active;