mirror of
https://codeberg.org/dnkl/foot.git
synced 2026-02-07 04:06:07 -05:00
term: add term_set_user_mouse_cursor()
This function allows setting a custom mouse cursor. This is done by adding a ‘char*’ member to the term struct. When it is non-NULL, we *always* use that pointer (the exception being when the pointer is hidden), while the pointer is over the grid. This is instead of the hand/beam pointers we otherwise would use.
This commit is contained in:
parent
e4f9dc7d58
commit
0bf92fff05
2 changed files with 17 additions and 0 deletions
15
terminal.c
15
terminal.c
|
|
@ -1681,6 +1681,7 @@ term_destroy(struct terminal *term)
|
|||
|
||||
free(term->foot_exe);
|
||||
free(term->cwd);
|
||||
free(term->mouse_user_cursor);
|
||||
|
||||
int ret = EXIT_SUCCESS;
|
||||
|
||||
|
|
@ -1820,6 +1821,8 @@ term_reset(struct terminal *term, bool hard)
|
|||
tll_free_and_free(term->window_title_stack, free);
|
||||
term_set_window_title(term, term->conf->title);
|
||||
|
||||
term_set_user_mouse_cursor(term, NULL);
|
||||
|
||||
memset(term->normal.kitty_kbd.flags, 0, sizeof(term->normal.kitty_kbd.flags));
|
||||
memset(term->alt.kitty_kbd.flags, 0, sizeof(term->alt.kitty_kbd.flags));
|
||||
term->normal.kitty_kbd.idx = term->alt.kitty_kbd.idx = 0;
|
||||
|
|
@ -2986,7 +2989,11 @@ term_xcursor_update_for_seat(struct terminal *term, struct seat *seat)
|
|||
|
||||
switch (term->active_surface) {
|
||||
case TERM_SURF_GRID: {
|
||||
bool have_custom_cursor =
|
||||
render_xcursor_is_valid(seat, term->mouse_user_cursor);
|
||||
|
||||
xcursor = seat->pointer.hidden ? XCURSOR_HIDDEN
|
||||
: have_custom_cursor ? term->mouse_user_cursor
|
||||
: term->is_searching ? XCURSOR_LEFT_PTR
|
||||
: (seat->mouse.col >= 0 &&
|
||||
seat->mouse.row >= 0 &&
|
||||
|
|
@ -3575,3 +3582,11 @@ term_osc8_close(struct terminal *term)
|
|||
term->vt.osc8.id = 0;
|
||||
term_update_ascii_printer(term);
|
||||
}
|
||||
|
||||
void
|
||||
term_set_user_mouse_cursor(struct terminal *term, const char *cursor)
|
||||
{
|
||||
free(term->mouse_user_cursor);
|
||||
term->mouse_user_cursor = cursor != NULL ? xstrdup(cursor) : NULL;
|
||||
term_xcursor_update(term);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -342,6 +342,7 @@ struct terminal {
|
|||
enum keypad_keys keypad_keys_mode;
|
||||
enum mouse_tracking mouse_tracking;
|
||||
enum mouse_reporting mouse_reporting;
|
||||
char *mouse_user_cursor; /* For OSC-22 */
|
||||
|
||||
tll(int) tab_stops;
|
||||
|
||||
|
|
@ -771,6 +772,7 @@ void term_mouse_motion(
|
|||
bool term_mouse_grabbed(const struct terminal *term, const struct seat *seat);
|
||||
void term_xcursor_update(struct terminal *term);
|
||||
void term_xcursor_update_for_seat(struct terminal *term, struct seat *seat);
|
||||
void term_set_user_mouse_cursor(struct terminal *term, const char *cursor);
|
||||
|
||||
void term_set_window_title(struct terminal *term, const char *title);
|
||||
void term_flash(struct terminal *term, unsigned duration_ms);
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue