100 Commits
Author SHA1 Message Date
Aleksei Bavshin 45fec7bcbb Revert "change layer for mode invisible to nullopt"
Previous commit should have a better workaround for #3211.

This reverts commit b61ea62732.
2024-09-14 22:43:07 -07:00
Aleksei Bavshin 7b23d58684 fix(bar): force commit for occluded surfaces
All the mode or visibility changes require `wl_surface_commit` to be
applied. gtk-layer-shell will attempt to force GTK to commit, but may
fail if the surface has stopped receiving frame callbacks[^1].
Thus, we could get stuck in a state where the bar is hidden and unable
to regain visibility.

To address this, a new API has been added to gtk-layer-shell,
`gtk_layer_try_force_commit`, which does `wl_surface_commit` with the
necessary safety checks to avoid corrupting GTK internal state.

Note: this change bumps gtk-layer-shell requirement to 0.9.0.

[^1]: https://github.com/wmww/gtk-layer-shell/issues/185
2024-09-14 22:43:06 -07:00
Aleksei Bavshin 0006e4713a fix(tray): revert ustring formatting changes
This reverts commit a4d31ab10d.
2024-09-14 07:38:41 -07:00
Aleksei Bavshin f60c291b82 chore: update fmt wrap to 11.0.2 2024-09-14 07:36:23 -07:00
Aleksei Bavshin 4a6af0da99 fix(bar): use overlay layer for hide and overlay modes
This fixes a major inconsistency with the swaybar implementation of
these modes[^1]. `overlay` layer no longer has security implications due
to a wide adoption of `ext-session-lock`, so it's safe to use.

Following config will restore the previous behavior:
```json
"modes": {
    "hide": { "layer": "top" },
    "overlay": { "layer": "top" }
},
```

[^1]: https://github.com/swaywm/sway/commit/2f7247e08a16610228067c9ec34d2b6d897e15fa
2024-09-13 01:26:25 -07:00
Aleksei Bavshin 1f23b30b56 hyprland/backend: drop unnecessary getaddrinfo call
Hyprland hasn't been using TCP sockets for IPC since the first release,
so this getaddrinfo call and its result was never needed.

Additionally, it leaks the `aiRes`, causing test failure under ASan.
2024-08-17 22:32:17 -07:00
Aleksei Bavshin dcddddd3f1 fix(power-profiles-daemon): correctly set initial visibility
The bus error when the daemon is not reachable prevents the initial
update and keeps the module visible, as an empty section on the bar.

Do the update explicitly before connecting to set initial visibility.

While we at it, remove a couple of redundant `update()` calls.
2024-03-14 20:47:07 -07:00
Aleksei Bavshin c03fa38974 fix(mpd): use default interval in the example config
2 seconds is 2.5 times more often than the default for the module.
2024-03-01 00:53:12 -08:00
Aleksei Bavshin bb60d41842 fix(mpd): use timers with second granularity where possible
Reuse already armed timer in Disconnected state.
2024-03-01 00:27:23 -08:00
Aleksei Bavshin 653c24cee1 feat(mpd): tone down logs if the server is not running 2024-03-01 00:16:19 -08:00
Aleksei Bavshin 55915f95f1 ci: move FreeBSD to ubuntu runners
With the recent runner hardware upgrade[1] and support in the
cross-platform-actions[2] it became possible to use a Linux runner for
this workflow.
Linux-based configuration appears to be faster and stabler than macOS,
so it's now recommended for use.

[1]: https://github.blog/2024-01-17-github-hosted-runners-double-the-power-for-open-source/
[2]: https://github.com/cross-platform-actions/action/releases/tag/v0.23.0
2024-02-28 23:56:10 -08:00
Aleksei Bavshin 43aabf046c chore: rename config to config.jsonc
Only changes the name of the default config we install and does not
affect the lookup logic in any way.

Man pages were already fixed in #2744
2024-02-25 12:00:53 -08:00
Aleksei Bavshin 2108959644 chore(config): add modeline for Emacs json-mode
json-mode supports jsonc format since 1.8.0, but does not register
.jsonc as a file extension.
2024-02-25 11:21:58 -08:00
Aleksei Bavshin 05fbbc1c43 style: align 'sway/mode' text with other modules
Use `box-shadow` instead of borders for consistent vertical alignment.
See 77c7e10 for a similar conversion of other modules.
2024-02-24 18:26:02 -08:00
Aleksei Bavshin 2540c07f1d chore: wrap module lists in the config
"modules-right" has gotten too long, and it's easier to compare configs
that way.
2024-02-24 18:24:39 -08:00
Aleksei Bavshin 188789592e feat(sway/language): option to hide module with single layout 2024-02-24 00:30:45 -08:00
Aleksei Bavshin 99c48bca36 fix: formatting 2024-02-24 00:30:44 -08:00
Aleksei Bavshin 5fc2b97194 ci: fix clang-tidy action 2024-02-20 17:22:33 -08:00
Aleksei Bavshin f885baba61 fix(clock): remove literal operator with reserved name
```
../include/util/date.hpp:34:26: warning: literal operator suffixes not preceded by ‘_’ are reserved for future standardization [-Wliteral-suffix]
   34 | constexpr decltype(auto) operator""d(unsigned long long d) noexcept {
```
2024-02-19 21:56:47 -08:00
Aleksei Bavshin a2deff3689 fix(clock): crash on scrolling with local timezone ("") in the list
While we at it, eliminate use of non-portable GCC conditional expression
syntax. There are no significant side-effects that would justify use of
the language extension.
2024-02-19 21:56:46 -08:00
Aleksei Bavshin 5d6acfd1d4 test: restore compatibility with older Catch2 releases 2024-02-19 17:00:01 -08:00
Aleksei Bavshin d59d6e8765 chore: remove duplicate fedora/c++20 job definition 2024-02-19 16:35:56 -08:00
Aleksei Bavshin bdb2f2bd1a chore: update Debian CI dependencies
This should speed-up "linux (debian)" and "clang-tidy" builds and enable
lints for more modules.
2024-02-19 16:35:21 -08:00
Aleksei Bavshin c6f5cbdf0c refactor: move all module includes to factory.cpp
None of these includes are required in the header.
2024-02-19 15:11:08 -08:00
Aleksei Bavshin a95b6a39c9 build: mark bluetooth as Linux-specific 2024-02-19 14:08:22 -08:00
Aleksei Bavshin 8a4a44896a refactor: merge BarSurface into Bar
With only one implementation left, the abstraction is no longer
necessary.
2024-02-19 03:00:38 -08:00
Aleksei Bavshin 4420447e74 fix(bar): use std::string for mode names
`string_view` leads to UAF when reading custom mode definitions from the
configuration.
2024-02-19 01:50:40 -08:00
Aleksei Bavshin 543290ab07 fix: -Wnon-virtual-dtor warning in CssReloadHelper
```
../include/util/css_reload_helper.hpp:15:7: warning: 'class waybar::CssReloadHelper' has virtual functions and accessible non-virtual destructor [-Wnon-virtual-dtor]
```
2024-02-17 21:43:10 -08:00
Aleksei Bavshin fd5a03dc5f build: disable catch2 unit-tests
The library tests take more time to complie than the entire Waybar.
2024-02-17 21:43:09 -08:00
Aleksei Bavshin f3063e86aa build: install man pages only for enabled modules 2024-02-17 21:43:08 -08:00
Aleksei Bavshin 3cb587945a fix: use gtk_layer_set_keyboard_mode()
`gtk_layer_set_keyboard_interactivity()` is deprecated and was removed
in gtk4-layer-shell.
Note that this bumps version requirement to 0.6.0
2024-02-17 11:23:19 -08:00
Aleksei Bavshin 9a21884272 feat!: drop RawSurfaceImpl with direct use of wlr-layer-shell
BREAKING CHANGE: gtk-layer-shell is now required and unconditionally
used. The corresponding config option is removed.

As a part of preparation for future versions of GTK, remove an ability
to use wlr-layer-shell directly. The APIs it required were dropped in
GTK4, and with the menus/tooltips positioning issue being practically
unsolvable it doesn't make sense to keep maintaining the code.
2024-02-17 11:23:17 -08:00
Aleksei Bavshin 4f5dd53571 chore: update gtk-layer-shell subproject to 0.8.2 2024-02-17 11:21:43 -08:00
Aleksei Bavshin 4b34486143 man: fix missing code block fence in hyprland-workspaces 2024-02-17 08:45:44 -08:00
Aleksei Bavshin 63935ba0fb build: don't use sh for scdoc 2024-02-17 08:45:18 -08:00
Aleksei Bavshin d9f9fb51ff build: use / instead of join_paths 2024-02-17 08:45:17 -08:00
Aleksei Bavshin c2f37705ad build: address meson deprecation warnings:
- `ExternalProgram.path`
- `dependency.get_pkgconfig_variable`
- `meson.build_root`
- `meson.source_root`
2024-02-17 08:45:16 -08:00
Aleksei Bavshin 72406fa3f2 build: require gio-unix-2.0 unconditionally
We already use it without checking (`<gio/gdesktopappinfo.h>` in
wlr/taskbar), it's a transitive dependency of GTK and it's always
available on Unix platforms.
2024-02-17 08:33:31 -08:00
Aleksei Bavshin 104accdc34 build: drop std::filesystem checks
The `<experimental/filesystem>` and `-lc++experimental` aren't needed
since LLVM 9.0. And since we now require C++20, checking for the
`<filesystem>` support shouldn't be necessary either.
2024-02-17 08:33:22 -08:00
Aleksei Bavshin d590d508ca feat: add module class to the root elements of the modules
Previously, the only way to select all the module labels was with the
following kind of selector:
```css
.modules-left > widget > label,
.modules-center > widget > label,
.modules-right > widget > label {
    /* ... */
}
```
(and a matching block for the `box` containers).

Now, this can be expressed as
```css
label.module, box.module {
    /* ... */
}
```
2024-02-14 22:41:13 -08:00
Aleksei Bavshin 2f555a6936 refactor(bar): use Gtk enums for position and orientation
Ensure that the position and the corresponding CSS class on window are
always set.
2024-02-14 22:11:21 -08:00
Aleksei Bavshin 51b6c22cab ci: add glibc locales for date formatting tests.
Add some missing dependencies for Fedora.
2023-01-21 02:18:46 -08:00
Aleksei Bavshin 01cee153a4 ci: try to build with cpp_std=c++20
Add an extra job to build with `-std=c++20` on Fedora.
Update actions/checkout to v3.
2023-01-21 02:18:45 -08:00
Aleksei Bavshin 93e340a081 feat(clock): support chrono Time Zone extensions.
Use chrono Calendars and Time Zones (P0355R7, P1466R3) when available
instead of the `date` library.
Verified with a patched build of a recent GCC 13 snapshot.
2023-01-21 02:18:44 -08:00
Aleksei Bavshin 6225db0a48 test: refactor date formatter tests.
- Add tests for global locale.
- Warn about missing locales.
- Downgrade REQUIRE to CHECK.
- Skip tests if localized formatting does not work as expected.
2023-01-21 02:18:43 -08:00
Aleksei Bavshin ea17a66dfc fix: compilation errors with cpp_std=c++20
There were two main issues with fmtlib and C++20 mode:

 - `fmt::format` defaults to compile-time argument checking and requires
   using `fmt::runtime(format_string)` to bypass that.
 - `std::format` implementation introduces conflicting declarations and
   we have to specify the namespace for all `format`/`format_to` calls.
2023-01-20 22:50:02 -08:00
Aleksei Bavshin 67efe1af89 refactor(clock): remove struct waybar_time
The structure was used to pass the locale instance to the date
formatter. All the supported versions of `fmt` are passing the locale
parameter via `FormatContext.locale()` so we can remove the struct and
simplify the code.

While we at it, drop `date::make_zoned` in favor of CTAD on a
`date::zoned_time` constructor.
2023-01-20 22:50:01 -08:00
Aleksei Bavshin ba498869c5 fix(clock): delete outdated warning 2023-01-20 22:50:00 -08:00
Aleksei Bavshin 43d52c59d9 test: fix build with Catch2 v2.x
Use smaller includes for Catch2 v3.
2023-01-20 22:49:59 -08:00
Aleksei Bavshin ca9d237b00 fix(sway): add missing includes for GCC 13
See also: https://gcc.gnu.org/gcc-13/porting_to.html
2023-01-20 22:49:58 -08:00
Aleksei Bavshin 22084691ff fix(battery): ignore non-system power supplies
Linux power_supply sysfs interface allows checking if the battery powers
the whole system or a specific device/tree of devices with `scope`
attribute[1]. We can use it to skip the non-system power supplies in the
battery module and avoid adding HIDs or other peripheral devices to the
total.

The logic is based on UPower, where it is assumed that "Unknown" devices
or devices without a `scope` are system power supplies.

[1]: https://lore.kernel.org/lkml/alpine.LNX.2.00.1201031556460.24984@pobox.suse.cz/T/
2022-12-04 00:14:42 -08:00
Aleksei Bavshin a44622aa9f fix: fmt 9.x deprecation warning for implicit enum conversions 2022-07-13 22:36:37 -07:00
Aleksei Bavshin 3117aefdf3 fix: drop conditionals for ancient fmt versions 2022-07-13 22:36:33 -07:00
Aleksei Bavshin 24a8332b62 fix: adapt to fmt 9.0.0 breaking changes 2022-07-13 22:36:32 -07:00
Aleksei Bavshin 13fdbc13c3 refactor: change enum ipc_command_type to uint32_t
As we always use the enum to compare or initialize uint32_t values, it
would be better to declare it with the right type. This way we could
avoid `-Wnarrowing` warnings or unnecessary type casts.
2022-04-10 12:52:46 -07:00
Aleksei Bavshin ce404199de chore: add tzdata to the alpine builder
Fixes date formatting test execution on alpine.
2022-01-07 22:50:23 -08:00
Aleksei Bavshin 7f6bef2049 fix(util): make waybar_time formatter compatible with fmt 8.1.0
Stop using private implementation details of the `formatter<std::tm>`.
We never needed anything from the class besides the format specifier,
which is easily obtainable with public API.
2022-01-07 22:34:00 -08:00
Aleksei Bavshin 1489a539f8 chore: bump supported fmt ver to 7.0.0
Certain features we use were added only in 7.0 and the code no longer
compiles with any earlier versions.
2022-01-07 22:33:52 -08:00
Aleksei Bavshin 766c8a1035 test: add tests for waybar_time formatter 2022-01-07 22:33:50 -08:00
Aleksei Bavshin 8c41aaae04 refactor(test): use single executable 2022-01-07 19:21:51 -08:00
Aleksei Bavshin c0d84853ea refactor(clock): extract waybar_time to util/waybar_time.hpp 2022-01-07 18:09:44 -08:00
Aleksei Bavshin b6d0a4b63f feat(bar): allow customization of bar modes
Allow changing existing modes and adding new ones via `modes`
configuration key.
`modes` accepts a JSON object roughly described by the following type
```typescript
type BarMode = {
    layer: 'bottom' | 'top' | 'overlay';
    exclusive: bool;
    passthrough: bool;
    visible: bool;
};
type BarModeList = {
    [name: string]: BarMode;
};
```
and will be merged with the default modes defined in `bar.cpp`.

Note that with absence of other ways to set mode, only those defined in
the `sway-bar(5)`[1] documentation could be used right now.

[1]: https://github.com/swaywm/sway/blob/master/sway/sway-bar.5.scd
2021-11-28 12:19:45 -08:00
Aleksei Bavshin cf5ddb2a5e fix(swaybar-ipc): avoid unnecessary copy of struct swaybar_config 2021-11-28 11:34:21 -08:00
Aleksei Bavshin 4b5dc1bb3a test: count copies and moves done by SafeSignal 2021-11-28 09:52:18 -08:00
Aleksei Bavshin b4e19678b7 ci: increase FreeBSD VM memory to 2048MB
Intermittent CI failures without any useful diagnostics could be caused
by the OOM killer. 1024MB is not really enough to run 3 parallel jobs
with a modern C++ compiler.
2021-11-23 19:48:31 -08:00
Aleksei Bavshin 8fe42ebd2e doc: update exclusive and passthrough defaults 2021-11-23 19:18:24 -08:00
Aleksei Bavshin 2290fe10aa fix(bar): handle ipc connection errors.
Try to use the default bar id (`bar-0`) if none is set.
2021-11-23 08:46:58 -08:00
Aleksei Bavshin 6bfb674d1b fix(swaybar-ipc): better logs 2021-11-21 17:28:47 -08:00
Aleksei Bavshin 4154492603 ci: update FreeBSD configuration
Use latest action v0.1.5.
Pin runner to macos-10.15. macos-latest will start using macos-11 images
without VirtualBox in less than a month[1].

[1] https://github.com/actions/virtual-environments/issues/4060
2021-11-19 21:17:55 -08:00
Aleksei Bavshin 5baffbf8f8 doc: document swaybar ipc options, ipc and id 2021-11-19 20:28:57 -08:00
Aleksei Bavshin fbedc3d133 fix(tray): fix visibility of Passive items
`show_all` call from `Tray::update` attempts to walk the widget tree and
make every widget visible. Since we control individual tray item
visibility based on `Status` SNI property, we don't want that to happen.

Modify `Tray::update` to control the visibility of a whole tray module
only and ensure that the children of `Item` are still visible when
necessary.
2021-10-02 00:08:45 -07:00
Aleksei Bavshin 5991bbb741 ci: run unit-tests 2021-09-15 22:20:46 +07:00
Aleksei Bavshin d7d606b721 doc: update documentation for 'include' 2021-09-15 22:20:45 +07:00
Aleksei Bavshin 0c1d3e30b6 fix(config): preserve explicit null when merging objects 2021-09-15 22:20:44 +07:00
Aleksei Bavshin ccc60b4245 refactor(config): more sensible multi-bar include behavior 2021-09-15 22:15:27 +07:00
Aleksei Bavshin 8912bd3ed0 test: multi-bar config with includes 2021-09-15 21:34:56 +07:00
Aleksei Bavshin 9f3b34e4d9 test: validate configuration load 2021-09-15 21:34:55 +07:00
Aleksei Bavshin 6eba62f060 test: add build configs for catch2 2021-09-15 21:34:55 +07:00
Aleksei Bavshin 1f16d7955d refactor(config): drop getValidPath 2021-09-15 21:34:54 +07:00
Aleksei Bavshin 1f7d399b8e refactor(config): remove style handling from Config 2021-09-15 21:34:53 +07:00
Aleksei Bavshin 4fff2eaaa0 refactor(client): change config visibility to public 2021-09-15 21:34:10 +07:00
Aleksei Bavshin b377520a38 refactor(client): extract config handling into a new class 2021-09-14 13:15:54 +07:00
Aleksei Bavshin a5fe6f40b8 feat(tray): handle Status property
On the `Passive` value of `Status` tray items would be hidden unless
`show-passive-items` is set to true.
On the `NeedsAttention` value of `Status` tray items will have a
`.needs-attention` CSS class.
2021-07-22 08:04:06 -07:00
Aleksei Bavshin 245f7f4b11 feat(tray): handle scroll events 2021-07-22 08:04:05 -07:00
Aleksei Bavshin 1418f96e46 feat(tray): fallback to Title for items without ToolTip 2021-07-22 08:04:04 -07:00
Aleksei Bavshin 84a8f79bbe feat(tray): implement tooltips (text only) for tray items 2021-07-22 08:04:03 -07:00
Aleksei Bavshin 4b6253e810 refactor(tray): infer changed properties from signal name
Comparing two GVariants is too expensive; let's collect the set of
properties updated by each signal and apply them unconditionally.
2021-07-22 08:04:00 -07:00
Aleksei Bavshin 929fc16994 fix(tray): ignore unused WindowId property 2021-07-22 08:01:25 -07:00
Aleksei Bavshin 5420a91046 chore: update FreeBSD action to address ntp sync issue 2021-07-01 00:13:30 -07:00
Aleksei Bavshin 2a52efa99a chore: update fedora dockerfile 2021-06-30 23:51:28 -07:00
Aleksei Bavshin d3c59c42ef feat(ci): add GitHub CI jobs on Linux 2021-06-30 23:51:09 -07:00
Aleksei Bavshin 5da268077c fix(util): protect std::condition_variable methods from pthread_cancel
The changes in GCC 11.x made `std::condition_variable` implementation
internals `noexcept`. `noexcept` is known to interact particularly bad
with `pthread_cancel`, i.e. `__cxxabiv1::__force_unwind` passing through
the `noexcept` call stack frame causes a `std::terminate` call and
immediate termination of the program

Digging through the GCC ML archives[1] lead me to the idea of patching
this with a few pthread_setcancelstate's. As bad as the solution is, it
seems to be the best we can do within C++17 limits and without major
rework.

[1]: https://gcc.gnu.org/legacy-ml/gcc/2017-08/msg00156.html
2021-06-12 12:56:44 -07:00
Aleksei Bavshin da2d603b53 doc: add man for exclusive and passthrough flags 2021-05-21 22:44:19 -07:00
Aleksei Bavshin 7aaa3df701 feat(bar): add config flag to disable exclusive zone 2021-05-21 22:44:18 -07:00
Aleksei Bavshin 729553d3bc feat(bar): add config flag for pointer event passthrough 2021-05-21 22:44:17 -07:00
Aleksei Bavshin 943ba3a2da fix: schedule output destruction on idle callback
Defer destruction of bars for the output to the next iteration of the
event loop to avoid deleting objects referenced by currently executed
code.
2021-02-22 18:35:09 -08:00
Aleksei Bavshin e786ea601e fix(rfkill): handle EAGAIN correctly 2021-02-10 08:26:21 -08:00
Aleksei Bavshin 6d5afdaa5f fix(network): don't block the main thread on rfkill update
Moving rfkill to the main event loop had unexpected side-effects.
Notably, the network module mutex can block all the main thread events
for several seconds while the network worker thread is sleeping.

Instead of waiting for the mutex let's hope that the worker thread
succeeds and schedule timer thread wakeup just in case.
2021-02-09 21:27:22 -08:00
Aleksei Bavshin 52dd3d2446 refactor(bluetooth): remove interval and timer thread
The timer thread was always reading the same value from Rfkill state.
2021-02-09 21:27:21 -08:00
Aleksei Bavshin ecc32ddd18 refactor(bluetooth): remove Bluetooth::status_
The string was always overwritten in `update()`; don't need to store
temporary value in the class.
2021-02-09 21:27:20 -08:00