diff --git a/src/Surface.zig b/src/Surface.zig index d138f798f..e2b5f51a5 100644 --- a/src/Surface.zig +++ b/src/Surface.zig @@ -2145,20 +2145,16 @@ pub fn mouseButtonCallback( // cursorPosCallback will also do a mouse report so we don't need to do any // of the logic below. if (button == .left and action == .press) { + // We could do all the conditionals in one but I find it more + // readable as a human to break this one up. if (mods.shift and self.mouse.left_click_count > 0 and !shift_capture) { - // Checking for selection requires the renderer state mutex which - // sucks but this should be pretty rare of an event so it won't - // cause a ton of contention. - const selection = selection: { - self.renderer_state.mutex.lock(); - defer self.renderer_state.mutex.unlock(); - break :selection self.io.terminal.screen.selection != null; - }; - - if (selection) { + // We split this conditional out on its own because this is the + // only one that requires a renderer mutex grab which is VERY + // expensive because it could block all our threads. + if (self.hasSelection()) { const pos = try self.rt_surface.getCursorPos(); try self.cursorPosCallback(pos); return true;