diff options
| author | James McCoy <jamessan@jamessan.com> | 2020-08-08 08:57:35 -0400 | 
|---|---|---|
| committer | James McCoy <jamessan@jamessan.com> | 2020-08-08 08:57:35 -0400 | 
| commit | 840c12c10741d8f70e1787534fb6ea6d2b70edee (patch) | |
| tree | f89ad27acbbf0b36db7ac08eeae0b8362da1fabb /src/nvim/api/ui.c | |
| parent | e813ec79c201c85c5af3b10c051ae92ab5cb8606 (diff) | |
| parent | f26df8bb66158baacb79c79822babaf137607cd6 (diff) | |
| download | rneovim-840c12c10741d8f70e1787534fb6ea6d2b70edee.tar.gz rneovim-840c12c10741d8f70e1787534fb6ea6d2b70edee.tar.bz2 rneovim-840c12c10741d8f70e1787534fb6ea6d2b70edee.zip  | |
Merge remote-tracking branch 'upstream/master' into libcallnr
Diffstat (limited to 'src/nvim/api/ui.c')
| -rw-r--r-- | src/nvim/api/ui.c | 58 | 
1 files changed, 56 insertions, 2 deletions
diff --git a/src/nvim/api/ui.c b/src/nvim/api/ui.c index 75ee05761b..717713b948 100644 --- a/src/nvim/api/ui.c +++ b/src/nvim/api/ui.c @@ -109,7 +109,12 @@ void nvim_ui_attach(uint64_t channel_id, Integer width, Integer height,    UI *ui = xcalloc(1, sizeof(UI));    ui->width = (int)width;    ui->height = (int)height; -  ui->pum_height = 0; +  ui->pum_nlines = 0; +  ui->pum_pos = false; +  ui->pum_width = 0.0; +  ui->pum_height = 0.0; +  ui->pum_row = -1.0; +  ui->pum_col = -1.0;    ui->rgb = true;    ui->override = false;    ui->grid_resize = remote_ui_grid_resize; @@ -340,7 +345,56 @@ void nvim_ui_pum_set_height(uint64_t channel_id, Integer height, Error *err)                    "It must support the ext_popupmenu option");      return;    } -  ui->pum_height = (int)height; + +  ui->pum_nlines = (int)height; +} + +/// Tells Nvim the geometry of the popumenu, to align floating windows with an +/// external popup menu. +/// +/// Note that this method is not to be confused with |nvim_ui_pum_set_height()|, +/// which sets the number of visible items in the popup menu, while this +/// function sets the bounding box of the popup menu, including visual +/// decorations such as boarders and sliders. Floats need not use the same font +/// size, nor be anchored to exact grid corners, so one can set floating-point +/// numbers to the popup menu geometry. +/// +/// @param channel_id +/// @param width   Popupmenu width. +/// @param height  Popupmenu height. +/// @param row     Popupmenu row. +/// @param col     Popupmenu height. +/// @param[out] err Error details, if any. +void nvim_ui_pum_set_bounds(uint64_t channel_id, Float width, Float height, +                            Float row, Float col, Error *err) +  FUNC_API_SINCE(7) FUNC_API_REMOTE_ONLY +{ +  if (!pmap_has(uint64_t)(connected_uis, channel_id)) { +    api_set_error(err, kErrorTypeException, +                  "UI not attached to channel: %" PRId64, channel_id); +    return; +  } + +  UI *ui = pmap_get(uint64_t)(connected_uis, channel_id); +  if (!ui->ui_ext[kUIPopupmenu]) { +    api_set_error(err, kErrorTypeValidation, +                  "UI must support the ext_popupmenu option"); +    return; +  } + +  if (width <= 0) { +    api_set_error(err, kErrorTypeValidation, "Expected width > 0"); +    return; +  } else if (height <= 0) { +    api_set_error(err, kErrorTypeValidation, "Expected height > 0"); +    return; +  } + +  ui->pum_row = (double)row; +  ui->pum_col = (double)col; +  ui->pum_width = (double)width; +  ui->pum_height = (double)height; +  ui->pum_pos = true;  }  /// Pushes data into UI.UIData, to be consumed later by remote_ui_flush().  | 
