diff options
author | Björn Linse <bjorn.linse@gmail.com> | 2017-04-26 15:28:10 +0200 |
---|---|---|
committer | Björn Linse <bjorn.linse@gmail.com> | 2019-03-02 16:29:50 +0100 |
commit | 9a1675b065394734ddaef91a314896028e2b1d46 (patch) | |
tree | a8e869da9a89592dd69a806c19dbeacef84f9bf4 /src/nvim/mouse.c | |
parent | 018e0d5a19c3f710f41a78bcbb0c6e3e393a5ed8 (diff) | |
download | rneovim-9a1675b065394734ddaef91a314896028e2b1d46.tar.gz rneovim-9a1675b065394734ddaef91a314896028e2b1d46.tar.bz2 rneovim-9a1675b065394734ddaef91a314896028e2b1d46.zip |
floats: implement floating windows
Co-Author: Dongdong Zhou <dzhou121@gmail.com>
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; } |