From 9b28ba7a5eabcc61d5d9891fa8cab3285a371788 Mon Sep 17 00:00:00 2001 From: Maxim Kolesnikov Date: Mon, 4 Apr 2022 17:49:13 +0700 Subject: [PATCH 01/32] fix(script): clear output when exec-if fails (#2675) Fixes #2674 --- CHANGELOG.md | 2 ++ src/adapters/script_runner.cpp | 5 ++++- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 2f4936cd..160aadbe 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -9,6 +9,8 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). ## [Unreleased] +### Fixed +- `custom/script`: Output clearing when `exec-if` fails ([`#2674`](https://github.com/polybar/polybar/issues/2674)) ## [3.6.2] - 2022-04-03 ### Fixed diff --git a/src/adapters/script_runner.cpp b/src/adapters/script_runner.cpp index 23a791f4..c1742199 100644 --- a/src/adapters/script_runner.cpp +++ b/src/adapters/script_runner.cpp @@ -45,7 +45,10 @@ script_runner::interval script_runner::process() { } void script_runner::clear_output() { - set_output(""); + auto changed = set_output(""); + if (changed) { + m_on_update(m_data); + } } void script_runner::stop() { From 7d9227cb0855d0cb559612ff50faf8fd17d6dba3 Mon Sep 17 00:00:00 2001 From: Patrick Ziegler Date: Thu, 7 Apr 2022 15:24:14 +0200 Subject: [PATCH 02/32] fix(battery): polling-interval not working (#2677) Fixes #2649 --- CHANGELOG.md | 1 + src/modules/battery.cpp | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 160aadbe..56cf2b64 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -11,6 +11,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## [Unreleased] ### Fixed - `custom/script`: Output clearing when `exec-if` fails ([`#2674`](https://github.com/polybar/polybar/issues/2674)) +- `internal/battery`: `poll-interval` not working ([`#2649`](https://github.com/polybar/polybar/issues/2649), [`#2677`](https://github.com/polybar/polybar/pull/2677)) ## [3.6.2] - 2022-04-03 ### Fixed diff --git a/src/modules/battery.cpp b/src/modules/battery.cpp index 7b8c4163..729f8a02 100644 --- a/src/modules/battery.cpp +++ b/src/modules/battery.cpp @@ -199,7 +199,7 @@ namespace modules { if (chrono::duration_cast(now - m_lastpoll) > m_interval) { m_lastpoll = now; m_log.info("%s: Polling values (inotify fallback)", name()); - read(*m_capacity_reader); + on_event(nullptr); } } From 146c1ac1d7c7f98279f6fae19466ded73c2186e7 Mon Sep 17 00:00:00 2001 From: Patrick Ziegler Date: Thu, 7 Apr 2022 15:33:56 +0200 Subject: [PATCH 03/32] fix(ipc): Fallback folder not being user-specific (#2684) If two users start a bar with IPC and don't have XDG_RUNTIME_DIR set, polybar will create the fallback directory `/tmp/polybar`. However, that directory is only accessible by the user that created it and so polybar running under the second user will fail to open its socket there. We add the UID to the fallback directory to prevent this. Fixes #2683 --- CHANGELOG.md | 1 + include/ipc/ipc.hpp | 4 +--- src/components/controller.cpp | 2 -- src/ipc/util.cpp | 9 ++++++++- 4 files changed, 10 insertions(+), 6 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 56cf2b64..b25bcdb0 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -12,6 +12,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Fixed - `custom/script`: Output clearing when `exec-if` fails ([`#2674`](https://github.com/polybar/polybar/issues/2674)) - `internal/battery`: `poll-interval` not working ([`#2649`](https://github.com/polybar/polybar/issues/2649), [`#2677`](https://github.com/polybar/polybar/pull/2677)) +- ipc: Polybar failing to open IPC channel after another user already ran polybar, if `XDG_RUNTIME_DIR` is not set ([`#2683`](https://github.com/polybar/polybar/issues/2683), [`#2684`](https://github.com/polybar/polybar/pull/2684)) ## [3.6.2] - 2022-04-03 ### Fixed diff --git a/include/ipc/ipc.hpp b/include/ipc/ipc.hpp index 0ba8af1b..7e2e0068 100644 --- a/include/ipc/ipc.hpp +++ b/include/ipc/ipc.hpp @@ -1,7 +1,5 @@ #pragma once -#include - #include #include "common.hpp" @@ -94,6 +92,6 @@ namespace ipc { void receive_data(string buf); void receive_eof(); }; -} // namespace ipc +} // namespace ipc POLYBAR_NS_END diff --git a/src/components/controller.cpp b/src/components/controller.cpp index ec856766..77681e1c 100644 --- a/src/components/controller.cpp +++ b/src/components/controller.cpp @@ -1,7 +1,5 @@ #include "components/controller.hpp" -#include - #include #include diff --git a/src/ipc/util.cpp b/src/ipc/util.cpp index b93cd36e..0a1d2315 100644 --- a/src/ipc/util.cpp +++ b/src/ipc/util.cpp @@ -1,6 +1,7 @@ #include "ipc/util.hpp" #include +#include #include "errors.hpp" #include "utils/env.hpp" @@ -12,8 +13,14 @@ POLYBAR_NS namespace ipc { static constexpr auto SUFFIX = ".sock"; + static constexpr auto XDG_RUNTIME_DIR = "XDG_RUNTIME_DIR"; string get_runtime_path() { + if (env_util::has(XDG_RUNTIME_DIR)) { + return env_util::get("XDG_RUNTIME_DIR") + "/polybar"; + } else { + return "/tmp/polybar-" + to_string(getuid()); + } return env_util::get("XDG_RUNTIME_DIR", "/tmp") + "/polybar"; } @@ -59,6 +66,6 @@ namespace ipc { return -1; } } -} // namespace ipc +} // namespace ipc POLYBAR_NS_END From ab206a5f8e3423ae3f634a7c639e2da0aeb9777d Mon Sep 17 00:00:00 2001 From: Patrick Ziegler Date: Mon, 11 Apr 2022 21:30:24 +0200 Subject: [PATCH 04/32] fix: No overlines/underlines being drawn when using offsets (#2685) --- CHANGELOG.md | 1 + include/components/renderer.hpp | 2 +- src/components/renderer.cpp | 18 +++++++++++++++--- 3 files changed, 17 insertions(+), 4 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index b25bcdb0..6f2524d2 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -13,6 +13,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - `custom/script`: Output clearing when `exec-if` fails ([`#2674`](https://github.com/polybar/polybar/issues/2674)) - `internal/battery`: `poll-interval` not working ([`#2649`](https://github.com/polybar/polybar/issues/2649), [`#2677`](https://github.com/polybar/polybar/pull/2677)) - ipc: Polybar failing to open IPC channel after another user already ran polybar, if `XDG_RUNTIME_DIR` is not set ([`#2683`](https://github.com/polybar/polybar/issues/2683), [`#2684`](https://github.com/polybar/polybar/pull/2684)) +- No overlines/underlines being drawn when using offsets ([`#2685`](https://github.com/polybar/polybar/pull/2685)) ## [3.6.2] - 2022-04-03 ### Fixed diff --git a/include/components/renderer.hpp b/include/components/renderer.hpp index 5dfc998a..c399b7e8 100644 --- a/include/components/renderer.hpp +++ b/include/components/renderer.hpp @@ -72,7 +72,7 @@ class renderer : public renderer_interface, void fill_overline(rgba color, double x, double w); void fill_underline(rgba color, double x, double w); void fill_borders(); - void draw_offset(rgba color, double x, double w); + void draw_offset(const tags::context& ctxt, rgba color, double x, double w); double block_x(alignment a) const; double block_y(alignment a) const; diff --git a/src/components/renderer.cpp b/src/components/renderer.cpp index 4da65ec9..493f5ef6 100644 --- a/src/components/renderer.cpp +++ b/src/components/renderer.cpp @@ -728,8 +728,12 @@ void renderer::render_text(const tags::context& ctxt, const string&& contents) { } } -void renderer::draw_offset(rgba color, double x, double w) { - if (w > 0 && color != m_bar.background) { +void renderer::draw_offset(const tags::context& ctxt, rgba color, double x, double w) { + if (w <= 0) { + return; + } + + if (color != m_bar.background) { m_log.trace_x("renderer: offset(x=%f, w=%f)", x, w); m_context->save(); *m_context << m_comp_bg; @@ -739,6 +743,14 @@ void renderer::draw_offset(rgba color, double x, double w) { m_context->fill(); m_context->restore(); } + + if (ctxt.has_underline()) { + fill_underline(ctxt.get_ul(), x, w); + } + + if (ctxt.has_overline()) { + fill_overline(ctxt.get_ol(), x, w); + } } void renderer::render_offset(const tags::context& ctxt, const extent_val offset) { @@ -746,7 +758,7 @@ void renderer::render_offset(const tags::context& ctxt, const extent_val offset) int offset_width = units_utils::extent_to_pixel(offset, m_bar.dpi_x); rgba bg = ctxt.get_bg(); - draw_offset(bg, m_blocks[m_align].x, offset_width); + draw_offset(ctxt, bg, m_blocks[m_align].x, offset_width); increase_x(offset_width); } From 4f923ededc32c4aab627d840dacd1cbec61afb18 Mon Sep 17 00:00:00 2001 From: Patrick Ziegler Date: Wed, 13 Apr 2022 10:47:01 +0200 Subject: [PATCH 05/32] doc: Fix menu module action migration example (#2687) The label-open was missing, making the snippet not work as-is. In addition, backgrounding programs is no longer necessary Ref #2686 --- doc/user/actions.rst | 20 ++++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) diff --git a/doc/user/actions.rst b/doc/user/actions.rst index 850a8c4a..24c6089f 100644 --- a/doc/user/actions.rst +++ b/doc/user/actions.rst @@ -406,20 +406,22 @@ Below you can see an example of a menu module: [module/apps] type = custom/menu + label-open = Apps + menu-0-0 = Browsers menu-0-0-exec = menu-open-1 menu-0-1 = Multimedia menu-0-1-exec = menu-open-2 menu-1-0 = Firefox - menu-1-0-exec = firefox & + menu-1-0-exec = firefox menu-1-1 = Chromium - menu-1-1-exec = chromium & + menu-1-1-exec = chromium menu-2-0 = Gimp - menu-2-0-exec = gimp & + menu-2-0-exec = gimp menu-2-1 = Scrot - menu-2-1-exec = scrot & + menu-2-1-exec = scrot This module uses two actions: ``menu-open-1`` and ``menu-open-2``. These are actions with data, the data specifies which level of the menu should @@ -437,17 +439,19 @@ likely not use ``apps``, but the name of your module. [module/apps] type = custom/menu + label-open = Apps + menu-0-0 = Browsers menu-0-0-exec = #apps.open.1 menu-0-1 = Multimedia menu-0-1-exec = #apps.open.2 menu-1-0 = Firefox - menu-1-0-exec = firefox & + menu-1-0-exec = firefox menu-1-1 = Chromium - menu-1-1-exec = chromium & + menu-1-1-exec = chromium menu-2-0 = Gimp - menu-2-0-exec = gimp & + menu-2-0-exec = gimp menu-2-1 = Scrot - menu-2-1-exec = scrot & + menu-2-1-exec = scrot From b5292791ef065c860cf2fc842ade1694acd2df31 Mon Sep 17 00:00:00 2001 From: Mathis Weber <83180705+Zaphoood@users.noreply.github.com> Date: Mon, 25 Apr 2022 03:59:40 -0700 Subject: [PATCH 06/32] fix: check if double click action associated (#2695) When a module is clicked, only wait for the double click interval if a double click action is associated with that module. Otherwise trigger the click right away. Fixes: #2663 --- CHANGELOG.md | 3 +++ include/components/bar.hpp | 3 ++- src/components/bar.cpp | 22 +++++++++------------- 3 files changed, 14 insertions(+), 14 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 5ce7c11e..6fabbcd8 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -21,6 +21,9 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - `custom/text`: Loads the `format` setting, which supports the `