From 789a877b379cd35c350610be62b971ae00feb542 Mon Sep 17 00:00:00 2001 From: Heghedus Razvan Date: Mon, 7 May 2018 19:30:45 +0300 Subject: Fix crash when using pango markup font The characters & < > ' " needs to be escaped when using pango markup Signed-off-by: Heghedus Razvan --- sway/tree/view.c | 21 ++++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) (limited to 'sway/tree') diff --git a/sway/tree/view.c b/sway/tree/view.c index e2cb8a7a..9bdc5198 100644 --- a/sway/tree/view.c +++ b/sway/tree/view.c @@ -14,6 +14,8 @@ #include "sway/tree/layout.h" #include "sway/tree/view.h" #include "sway/tree/workspace.h" +#include "sway/config.h" +#include "pango.h" void view_init(struct sway_view *view, enum sway_view_type type, const struct sway_view_impl *impl) { @@ -612,6 +614,19 @@ static size_t parse_title_format(struct sway_view *view, char *buffer) { return len; } +static char *escape_title(char *buffer) { + int length = escape_markup_text(buffer, NULL, 0); + char *escaped_title = calloc(length + 1, sizeof(char)); + int result = escape_markup_text(buffer, escaped_title, length); + if (result != length) { + wlr_log(L_ERROR, "Could not escape title: %s", buffer); + free(escaped_title); + return buffer; + } + free(buffer); + return escaped_title; +} + void view_update_title(struct sway_view *view, bool force) { if (!view->swayc) { return; @@ -631,11 +646,15 @@ void view_update_title(struct sway_view *view, bool force) { free(view->swayc->formatted_title); if (title) { size_t len = parse_title_format(view, NULL); - char *buffer = calloc(len + 1, 1); + char *buffer = calloc(len + 1, sizeof(char)); if (!sway_assert(buffer, "Unable to allocate title string")) { return; } parse_title_format(view, buffer); + // now we have the title, but needs to be escaped when using pango markup + if (config->pango_markup) { + buffer = escape_title(buffer); + } view->swayc->name = strdup(title); view->swayc->formatted_title = buffer; -- cgit v1.2.3 From 88d9d43b367b9b0cb61c4c9fb1619becdb71e9d6 Mon Sep 17 00:00:00 2001 From: emersion Date: Sun, 13 May 2018 16:38:56 +0100 Subject: Add xdg-shell stable support --- sway/tree/container.c | 12 ++++++++++++ sway/tree/view.c | 2 ++ 2 files changed, 14 insertions(+) (limited to 'sway/tree') diff --git a/sway/tree/container.c b/sway/tree/container.c index fc35a81c..9f7294db 100644 --- a/sway/tree/container.c +++ b/sway/tree/container.c @@ -7,6 +7,8 @@ #include #include #include +#include +#include #include "cairo.h" #include "pango.h" #include "sway/config.h" @@ -459,6 +461,16 @@ struct sway_container *container_at(struct sway_container *parent, sview->wlr_xdg_surface_v6, view_sx, view_sy, &_sx, &_sy); break; + case SWAY_VIEW_XDG_SHELL: + // the top left corner of the sway container is the + // coordinate of the top left corner of the window geometry + view_sx += sview->wlr_xdg_surface->geometry.x; + view_sy += sview->wlr_xdg_surface->geometry.y; + + _surface = wlr_xdg_surface_surface_at( + sview->wlr_xdg_surface, + view_sx, view_sy, &_sx, &_sy); + break; } if (_surface) { *sx = _sx; diff --git a/sway/tree/view.c b/sway/tree/view.c index e2cb8a7a..55271d79 100644 --- a/sway/tree/view.c +++ b/sway/tree/view.c @@ -74,6 +74,8 @@ const char *view_get_type(struct sway_view *view) { return "wl_shell"; case SWAY_VIEW_XDG_SHELL_V6: return "xdg_shell_v6"; + case SWAY_VIEW_XDG_SHELL: + return "xdg_shell"; case SWAY_VIEW_XWAYLAND: return "xwayland"; } -- cgit v1.2.3