diff options
author | Evgeni Chasnovski <evgeni.chasnovski@gmail.com> | 2022-06-19 16:08:43 +0300 |
---|---|---|
committer | Evgeni Chasnovski <evgeni.chasnovski@gmail.com> | 2022-06-23 10:34:02 +0300 |
commit | 9f28eddfab368697c21e6628fdf55af5ec4f4c39 (patch) | |
tree | ba305b2d2786160d882d14bcaef22d0ea727a02a /src/nvim/ui_compositor.c | |
parent | 7b2b44bce4bff85d9fd1bef09d294ddb889056e4 (diff) | |
download | rneovim-9f28eddfab368697c21e6628fdf55af5ec4f4c39.tar.gz rneovim-9f28eddfab368697c21e6628fdf55af5ec4f4c39.tar.bz2 rneovim-9f28eddfab368697c21e6628fdf55af5ec4f4c39.zip |
fix(float): make `screen*()` functions respect floating windows
Resolves #19013.
Diffstat (limited to 'src/nvim/ui_compositor.c')
-rw-r--r-- | src/nvim/ui_compositor.c | 13 |
1 files changed, 13 insertions, 0 deletions
diff --git a/src/nvim/ui_compositor.c b/src/nvim/ui_compositor.c index 3ce2b80ea9..5df70d0d8e 100644 --- a/src/nvim/ui_compositor.c +++ b/src/nvim/ui_compositor.c @@ -300,6 +300,19 @@ ScreenGrid *ui_comp_mouse_focus(int row, int col) return NULL; } +/// Compute which grid is on top at supplied screen coordinates +ScreenGrid *ui_comp_get_grid_at_coord(int row, int col) +{ + for (ssize_t i = (ssize_t)kv_size(layers) - 1; i > 0; i--) { + ScreenGrid *grid = kv_A(layers, i); + if (row >= grid->comp_row && row < grid->comp_row + grid->rows + && col >= grid->comp_col && col < grid->comp_col + grid->cols) { + return grid; + } + } + return &default_grid; +} + /// Baseline implementation. This is always correct, but we can sometimes /// do something more efficient (where efficiency means smaller deltas to /// the downstream UI.) |