diff options
author | Björn Linse <bjorn.linse@gmail.com> | 2019-03-02 17:26:50 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2019-03-02 17:26:50 +0100 |
commit | 7a6da502b9d8deecfc89d1497a8e8da15e65f31e (patch) | |
tree | e3811b52dd00e67175383f11f1b67b42acc88f4c /src/nvim/mouse.c | |
parent | 0aba4d825a5b18c5fa937c0426788f61f756e086 (diff) | |
parent | 9a1675b065394734ddaef91a314896028e2b1d46 (diff) | |
download | rneovim-7a6da502b9d8deecfc89d1497a8e8da15e65f31e.tar.gz rneovim-7a6da502b9d8deecfc89d1497a8e8da15e65f31e.tar.bz2 rneovim-7a6da502b9d8deecfc89d1497a8e8da15e65f31e.zip |
Merge pull request #6619 from bfredl/floating
Floating windows in TUI and Remote UI
Diffstat (limited to 'src/nvim/mouse.c')
-rw-r--r-- | src/nvim/mouse.c | 31 |
1 files changed, 21 insertions, 10 deletions
diff --git a/src/nvim/mouse.c b/src/nvim/mouse.c index 50dba92eca..6d1a517ce8 100644 --- a/src/nvim/mouse.c +++ b/src/nvim/mouse.c @@ -12,6 +12,7 @@ #include "nvim/screen.h" #include "nvim/syntax.h" #include "nvim/ui.h" +#include "nvim/ui_compositor.h" #include "nvim/os_unix.h" #include "nvim/fold.h" #include "nvim/diff.h" @@ -441,12 +442,6 @@ win_T *mouse_find_win(int *gridp, int *rowp, int *colp) return wp_grid; } - // TODO(bfredl): grid zero will have floats displayed on it, and will - // be adjusted to float grids. - if (*gridp == 0) { - *gridp = DEFAULT_GRID_HANDLE; - } - frame_T *fp; fp = topframe; @@ -478,15 +473,31 @@ win_T *mouse_find_win(int *gridp, int *rowp, int *colp) return NULL; } -static win_T *mouse_find_grid_win(int *grid, int *rowp, int *colp) +static win_T *mouse_find_grid_win(int *gridp, int *rowp, int *colp) { - if (*grid > 1) { - win_T *wp = get_win_by_grid_handle(*grid); - if (wp && wp->w_grid.chars) { + if (*gridp > 1) { + win_T *wp = get_win_by_grid_handle(*gridp); + if (wp && wp->w_grid.chars + && !(wp->w_floating && !wp->w_float_config.focusable)) { *rowp = MIN(*rowp, wp->w_grid.Rows-1); *colp = MIN(*colp, wp->w_grid.Columns-1); return wp; } + } else if (*gridp == 0) { + ScreenGrid *grid = ui_comp_mouse_focus(*rowp, *colp); + FOR_ALL_WINDOWS_IN_TAB(wp, curtab) { + if (&wp->w_grid != grid || !wp->w_float_config.focusable) { + continue; + } + *gridp = grid->handle; + *rowp -= grid->comp_row; + *colp -= grid->comp_col; + return wp; + } + + // no float found, click on the default grid + // TODO(bfredl): grid can be &pum_grid, allow select pum items by mouse? + *gridp = DEFAULT_GRID_HANDLE; } return NULL; } |