From 7f270a9f01f8c2674a29a1fcd1b91c8ea67cf6ea Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20Ekl=C3=B6f?= Date: Mon, 24 Feb 2020 22:38:35 +0100 Subject: [PATCH] term: add term_surface_kind(), and track currently active surface This is needed to handle pointer motion and button events correctly, since mouse actions in e.g. CSD surfaces are very different from mouse actions in the main window. --- terminal.c | 21 +++++++++++++++++++++ terminal.h | 15 +++++++++++++++ 2 files changed, 36 insertions(+) diff --git a/terminal.c b/terminal.c index 3977caae..d97354cd 100644 --- a/terminal.c +++ b/terminal.c @@ -2133,3 +2133,24 @@ term_print(struct terminal *term, wchar_t wc, int width) else term->cursor.lcf = true; } + +enum term_surface +term_surface_kind(const struct terminal *term, const struct wl_surface *surface) +{ + if (surface == term->window->surface) + return TERM_SURF_GRID; + else if (surface == term->window->search_surface) + return TERM_SURF_SEARCH; + else if (surface == term->window->csd.surface[0]) + return TERM_SURF_TITLE; + else if (surface == term->window->csd.surface[1]) + return TERM_SURF_BORDER_LEFT; + else if (surface == term->window->csd.surface[2]) + return TERM_SURF_BORDER_RIGHT; + else if (surface == term->window->csd.surface[3]) + return TERM_SURF_BORDER_TOP; + else if (surface == term->window->csd.surface[4]) + return TERM_SURF_BORDER_BOTTOM; + else + return TERM_SURF_NONE; +} diff --git a/terminal.h b/terminal.h index 53fecf6b..c25c0245 100644 --- a/terminal.h +++ b/terminal.h @@ -185,6 +185,17 @@ struct sixel { struct coord pos; }; +enum term_surface { + TERM_SURF_NONE, + TERM_SURF_GRID, + TERM_SURF_SEARCH, + TERM_SURF_TITLE, + TERM_SURF_BORDER_LEFT, + TERM_SURF_BORDER_RIGHT, + TERM_SURF_BORDER_TOP, + TERM_SURF_BORDER_BOTTOM, +}; + struct terminal { struct fdm *fdm; const struct config *conf; @@ -312,6 +323,7 @@ struct terminal { struct wayland *wl; struct wl_window *window; bool visual_focus; + enum term_surface active_surface; struct { bool refresh_needed; /* Terminal needs to be re-rendered, as soon-as-possible */ @@ -477,3 +489,6 @@ bool term_spawn_new(const struct terminal *term); void term_enable_app_sync_updates(struct terminal *term); void term_disable_app_sync_updates(struct terminal *term); + +enum term_surface term_surface_kind( + const struct terminal *term, const struct wl_surface *surface);