summaryrefslogtreecommitdiff
path: root/src/mouse.zig
diff options
context:
space:
mode:
Diffstat (limited to 'src/mouse.zig')
-rw-r--r--src/mouse.zig38
1 files changed, 19 insertions, 19 deletions
diff --git a/src/mouse.zig b/src/mouse.zig
index d1c32b40..22eb3270 100644
--- a/src/mouse.zig
+++ b/src/mouse.zig
@@ -7,6 +7,8 @@ const exec = @import("exec.zig");
const look = @import("look.zig");
const std = @import("std");
const layout = @import("layout.zig");
+const Presentation = @import("Presentation.zig");
+const animation = @import("animation.zig");
const modal = @import("modal.zig");
const ctlfs = @import("ninep/tree.zig");
const panes = @import("panes.zig");
@@ -720,9 +722,7 @@ fn dispatchPointerBuiltin(
const operand = text orelse return;
if (gesture) |g| if (reportGesture(p, id, cmd, operand, g.on_tag, g.operand, arg != null)) return;
// A middle click on a body is the exec a bound REPL may take.
- p.exec_from_body = cmd == config.exec_cmd and gesture != null and !gesture.?.on_tag;
- defer p.exec_from_body = false;
- exec.runBuiltin(p, cmd, id, "", exec.withArg(p, operand, arg));
+ exec.runBuiltinFrom(p, cmd, id, "", exec.withArg(p, operand, arg), gesture != null and !gesture.?.on_tag);
}
fn mirrorTtySelection(p: *Pardes, pane: *Pane) void {
@@ -1235,7 +1235,7 @@ test "pointer coordinates follow presented panel geometry" {
defer p.deinit();
const pane = p.panes[0].?;
- const moving: layout.Track = .{
+ const moving: animation.Track = .{
.serial = pane.serial,
.pane = 0,
.phase = .moving,
@@ -1246,13 +1246,13 @@ test "pointer coordinates follow presented panel geometry" {
p.acknowledgePanelPresentation(&.{moving});
// One shared physical-to-logical map feeds all pointer gestures. The
// selected sample is 26.25% across and 35% down the presented rectangle.
- try std.testing.expectEqual(layout.Presentation.CellPosition{ .col = 21, .row = 7 }, p.presentation.pointer(p.screen_w, p.screen_h, 30, 8).?);
+ try std.testing.expectEqual(Presentation.CellPosition{ .col = 21, .row = 7 }, p.presentation.pointer(p.screen_w, p.screen_h, 30, 8).?);
// Canonical cells covered only by the not-yet-arrived target are inert.
try std.testing.expect(p.presentation.pointer(p.screen_w, p.screen_h, 2, 2) == null);
// Unrelated screen space remains in the ordinary grid coordinate system.
- try std.testing.expectEqual(layout.Presentation.CellPosition{ .col = 100, .row = 10 }, p.presentation.pointer(p.screen_w, p.screen_h, 100, 10).?);
+ try std.testing.expectEqual(Presentation.CellPosition{ .col = 100, .row = 10 }, p.presentation.pointer(p.screen_w, p.screen_h, 100, 10).?);
- p.acknowledgePanelPresentation(&.{layout.Track{
+ p.acknowledgePanelPresentation(&.{animation.Track{
.serial = pane.serial,
.pane = 0,
.phase = .opening,
@@ -1264,7 +1264,7 @@ test "pointer coordinates follow presented panel geometry" {
// Tracks paint in pane-slot order inside a phase. The later slot is the
// top quad and therefore owns an overlap, even though both are moving.
- const overlap = [_]layout.Track{ .{
+ const overlap = [_]animation.Track{ .{
.serial = pane.serial,
.pane = 0,
.phase = .moving,
@@ -1282,7 +1282,7 @@ test "pointer coordinates follow presented panel geometry" {
p.presentation.shown_tracks = @splat(null);
p.presentation.shown_tracks[0] = overlap[0];
p.presentation.shown_tracks[1] = overlap[1];
- try std.testing.expectEqual(layout.Presentation.CellPosition{ .col = 65, .row = 3 }, p.presentation.pointer(p.screen_w, p.screen_h, 25, 3).?);
+ try std.testing.expectEqual(Presentation.CellPosition{ .col = 65, .row = 3 }, p.presentation.pointer(p.screen_w, p.screen_h, 25, 3).?);
}
test "queued pointer input is inert until a changed layout is presented" {
@@ -1298,7 +1298,7 @@ test "queued pointer input is inert until a changed layout is presented" {
try std.testing.expect(p.presentation.pending);
try std.testing.expect(p.presentation.pointer(p.screen_w, p.screen_h, 10, 4) == null);
- var tracks: [MAX_PANES]layout.Track = undefined;
+ var tracks: [MAX_PANES]animation.Track = undefined;
var len: usize = 0;
for (p.presentation.tracks) |maybe| if (maybe) |track| {
tracks[len] = track;
@@ -1315,7 +1315,7 @@ test "pointer rejects panel content cells which have not materialized" {
const p = try Pardes.init(std.testing.allocator, .{ .cols = 80, .rows = 12, .tty_only = true });
defer p.deinit();
const pane = p.panes[0].?;
- const target: layout.Box = .{ .x = 4, .y = 2, .w = 32, .h = 4 };
+ const target: animation.Box = .{ .x = 4, .y = 2, .w = 32, .h = 4 };
p.presentation.diffs = try p.gpa.alloc(PanelCellDiff, @as(usize, p.screen_w) * p.screen_h);
@memset(p.presentation.diffs, .unchanged);
for (2..6) |row| {
@@ -1330,9 +1330,9 @@ test "pointer rejects panel content cells which have not materialized" {
}
p.presentation.diff_state = .ready;
- for ([_]layout.Transition{ .dissolve, .ascii }) |effect| {
+ for ([_]animation.Transition{ .dissolve, .ascii }) |effect| {
const frame: u16 = if (effect == .dissolve) 3 else 5;
- const track: layout.Track = .{
+ const track: animation.Track = .{
.serial = pane.serial,
.pane = 0,
.phase = .opening,
@@ -1351,7 +1351,7 @@ test "pointer rejects panel content cells which have not materialized" {
const col: u16 = @intCast(4 + relative_col);
const row: u16 = @intCast(2 + relative_row);
const visible = switch (effect) {
- .dissolve => layout.dissolveRevealed(
+ .dissolve => animation.dissolveRevealed(
pane.serial,
rcol,
rrow,
@@ -1366,7 +1366,7 @@ test "pointer rejects panel content cells which have not materialized" {
const mapped = p.presentation.pointer(p.screen_w, p.screen_h, col, row);
try std.testing.expectEqual(visible, mapped != null);
if (mapped) |point|
- try std.testing.expectEqual(layout.Presentation.CellPosition{ .col = col, .row = row }, point);
+ try std.testing.expectEqual(Presentation.CellPosition{ .col = col, .row = row }, point);
saw_visible = saw_visible or visible;
saw_hidden = saw_hidden or !visible;
};
@@ -1382,9 +1382,9 @@ test "unchanged content cells remain clickable through data effects" {
p.presentation.diffs = try p.gpa.alloc(PanelCellDiff, @as(usize, p.screen_w) * p.screen_h);
@memset(p.presentation.diffs, .unchanged);
p.presentation.diff_state = .ready;
- const box: layout.Box = .{ .x = 2, .y = 2, .w = 20, .h = 4 };
+ const box: animation.Box = .{ .x = 2, .y = 2, .w = 20, .h = 4 };
- for ([_]layout.Transition{ .dissolve, .ascii }) |effect| {
+ for ([_]animation.Transition{ .dissolve, .ascii }) |effect| {
p.acknowledgePanelPresentation(&.{.{
.serial = pane.serial,
.pane = 0,
@@ -1393,7 +1393,7 @@ test "unchanged content cells remain clickable through data effects" {
.from = box,
.to = box,
}});
- try std.testing.expectEqual(layout.Presentation.CellPosition{ .col = 8, .row = 3 }, p.presentation.pointer(p.screen_w, p.screen_h, 8, 3).?);
+ try std.testing.expectEqual(Presentation.CellPosition{ .col = 8, .row = 3 }, p.presentation.pointer(p.screen_w, p.screen_h, 8, 3).?);
}
}
@@ -1402,7 +1402,7 @@ test "held drag follows acknowledged panels and balances an invisible release" {
defer p.deinit();
const pane = p.panes[0].?;
const target = layout.panelBox(p.rects[0]);
- var track: layout.Track = .{
+ var track: animation.Track = .{
.serial = pane.serial,
.pane = 0,
.phase = .moving,