aboutsummaryrefslogtreecommitdiff
path: root/swaybar
AgeCommit message (Collapse)Author
2023-07-08swaybar: handle wayland-cursor failuresManuel Stoeckl
Updating the cursor is not essential, so this change prints a warning when wl_cursor_theme_load or wl_cursor_theme_get_cursor fail instead of crashing or exiting.
2023-06-27swaybar: don't set current workspace as not visiblellyyr
When `wrap_scroll yes` is configured and there's only one workspace open, swaybar will mark it as not visible if the user scrolls on it and eventually incorrectly fail the `active->visible` assert. Fix this by making sure that new and current workspace aren't the same.
2023-06-25Use "default" XCursor instead of "left_ptr"Simon Ser
"left_ptr" is the legacy XCursor name. "default" is the cursor spec name.
2023-06-23swaybar: remove the argument of StatusNotifierHostRegisteredHodong
According to https://www.freedesktop.org/wiki/Specifications/StatusNotifierItem/StatusNotifierWatcher/ there is no argument for the StatusNotifierHostRegistered signal.
2023-05-09swaybar: always subscribe to mode and workspaceMukundan314
always subscribe to mode and workspace events, since we might need them after bar config updates even if we don't need them initially.
2023-04-14Use format_str() throughoutSimon Ser
2023-04-02swaybar: Lift background clearing out of main rendering functionAlexander Orzechowski
This avoids us from using a bogus background_color value that mutates as swaybar renders things and deciding opacity depending on that. Also remove a redundant full surface clear. Just directly write our desired background color.
2023-04-02swaybar: Set opaque region properlyAlexander Orzechowski
The opaque region is set incorrectly if updated on-the-fly if switching from an opaque to a non opaque background.
2023-02-27sway{,bar}: use default font hint stylellyyr
CAIRO_HINT_STYLE_FULL attempts to maximize contrast at the expense of fidelity, this makes most fonts that haven't been hand hinted, which makes up the majority of fonts out there, appear much worse. In the absence of explicitly set hint style, cairo will default to CAIRO_HINT_STYLE_SLIGHT, which attempts to improve contrast while retaining fidelity to the original shapes, which is what we want.
2023-01-03Use correct length for strncmp comparisonCarl Smedstad
2022-11-26swaybar: Make hotspots block bar release bindingsJoan Bruguera
The previous commit prioritized hotspots before bar bindings for press events, which matches i3's behaviour. However, since hotspots don't need to do any processing on release events, those were not handled, and simply fell through to `bindsym --release` bar bindings (if any). This is counter-intuitive, and doesn't match i3's behaviour. Instead in case a hotspot handles the press event, it should also handle the release event, doing nothing, but blocking the event from triggering a --release bar binding. E.g., in Sway, without this commit, this config. shows a text on tray clicks: bar { # ... bindsym --release button1 exec swaynag -m I_got_the_release_event. } But the same configuration in i3 (with i3-nagbar) doesn't show the text. Signed-off-by: Joan Bruguera <joanbrugueram@gmail.com>
2022-11-26swaybar: Prioritize hotspot events to bar bindingsJoan Bruguera
This is consistent with i3bar's behaviour, and for example, allows binding a command to button1, while still being able to click on tray icons or other zones on the bar's status line which may have their own bindings. E.g., in Sway, without this commit, this config. makes tray icons unclickable: bar { # ... bindsym button1 exec swaynag -m You_clicked_the_tray._Want_some_help? } But the same configuration in i3 (with i3-nagbar) keeps tray items clickable. Signed-off-by: Joan Bruguera <joanbrugueram@gmail.com>
2022-11-25build: drop intermediate libraries for protocolsSimon Ser
2022-07-01Reuse parsed PangoFontDescriptionHugo Osvaldo Barrera
Avoids parsing the configured font each time text is rendered.
2022-03-14swaybar: set opaque regionSimon Ser
When the background color is fully opaque, set the surface's opaque region to the whole surface.
2022-03-14swaybar: remove swaybar_output.input_regionSimon Ser
No need to keep the region around, we can immediately destroy it after the wl_surface.set_input_region request.
2022-01-19tray: do not render passive itemsTobias Bengfort
https://www.freedesktop.org/wiki/Specifications/StatusNotifierItem/StatusNotifierItem/#org.freedesktop.statusnotifieritem.status
2022-01-07swaybar: fix tray item icon scaling, positioningNathan Schulte
2022-01-07swaybar: fix tray_padding vs min-height re: scaleNathan Schulte
Co-authored-by: xdavidwu <xdavidwuph@gmail.com>
2021-12-21swaybar: fix errno handling in status_handle_readableSimon Ser
If getline fails once, it was not reset before the next getline call. errno is only overwritten by getline on error.
2021-12-13swaynag: remove xdg-output logicSimon Ser
We can just get the output name from wl_output directly, now that wl_output version 4 exists.
2021-11-25swaybar: signal status command's process groupLudvig Michaelsson
Make the status command a process group leader and change the kill(2) calls to target the new process group. Signals sent by swaybar will then be received by both the status command and its children, if any. While here, check the result of fork(2). Without this, children spawned by the status command may not receive the signals sent by swaybar. As a result, these children may be orphaned on reload. The issue could be shown by setting the bar to bar { status_command i3status | tee /tmp/i3status.out } which would leave orphaned processes for each reload of sway $ ps o pid,ppid,cmd | grep i3status | grep -v grep 43633 43624 sh -c i3status | tee /tmp/i3status.out 43634 43633 i3status 43635 43633 tee /tmp/i3status.out $ swaymsg reload $ ps o pid,ppid,cmd | grep i3status | grep -v grep 43634 1 i3status 43635 1 tee /tmp/i3status.out 43801 43788 sh -c i3status | tee /tmp/i3status.out 43802 43801 i3status 43803 43801 tee /tmp/i3status.out This fixes #5584.
2021-10-25refactor: use JSON_MAX_DEPTH everywhereJason Nader
2021-10-08swaybar: fix cairo_font_options leakNathan Schulte
2021-09-20swaybar: properly draw blocks with transparent black borderNathan Schulte
while the draw itself is a no-op, alignment must still be accounted this requires more signalling about the blocks (border_set; was the border set?)
2021-09-15swaybar: properly draw urgent block right borderNathan Schulte
introduced via #3287 -- https://github.com/swaywm/sway/pull/3287/files#diff-a1e918ce0bc71f4f7934767541319e724a51a34a5418ecdc286065e50921eda4L239 uncovered via #3394 -- https://github.com/swaywm/sway/pull/3394/files#diff-a1e918ce0bc71f4f7934767541319e724a51a34a5418ecdc286065e50921eda4R258
2021-09-13Rename pango_printf to render_textSimon Ser
This avoids using the pango_ prefix, reserved for functions coming from the Pango library.
2021-09-12Simplify swaybar/swaynag scaling codeCaduser2020
Use `cairo_scale` to set the scale factor, removing redundant multiplications by `output->scale`.
2021-07-26swaybar: log Wayland display errorsSimon Ser
2021-07-26swaybar: exit cleanly when disconnected from IPCSimon Ser
2021-05-10cairo: Replace <cairo/cairo.h> by <cairo.h>Issam E. Maghni
For full context, read https://gitlab.freedesktop.org/cairo/cairo/-/issues/479 TL;DR, cairo’s pc file adds `/cairo` to CFLAGS. So namespace cairo shouldn’t be used.
2021-03-22swaybar: fail gracefully on tokener creation failTudor Brindus
This commit adds missing error-handling to the creation of the tokener instance. The stack depth parameter is used to initialize an array that json-c prefaults ahead of time, causing INT_MAX to result in out of memory errors. Also drop the depth to 256 to prevent this OOM. Though this fix is not very satisfactory -- json-c could be made to not prefault -- it should do for now. At the very least, swaybar will not crash. Fixes #6126.
2021-03-21swaybar: use INT_MAX max JSON depth when parsing IPC responseTudor Brindus
There's no inherent limit on the nesting Sway can generate, and the default used by `json_tokener_new`, 32, can plausibly be hit during regular usage. Fixes #6115.
2021-03-20swaybar: Use position from wl_pointer.enterKenny Levinsen
Only wl_pointer.motion was used to update pointer position, which would cause issues if the pointer was not moved prior to wl_pointer.button. This also fixes touch input through wl_pointer emulation, which fires wl_pointer.button immediately after wl_pointer.enter. Copied from a similar fix made to swaynag. Closes: https://github.com/swaywm/sway/issues/6109
2021-03-17swaybar: silence missing IconThemePath messagePi-Yueh Chuang
IconThemePath is not a standard property in XDG's StatusNotifierItem specification, so missing this property should not be logged as an error. This patch changes the log level to SWAY_DEBUG when swaybar queries the value of IconThemePath so that swaybar won't log the returned message as an error if IconThemePath does not exist. Closes: https://github.com/swaywm/sway/issues/6092
2021-03-07swaybar: use text subpixel antialias only where it would look goodFenveireth
Closes #5605 Text Subpixel antialiasing is : - FreeType makes glyph bitmaps containing coverage percentage for each subpixel, instead of pixel - Then draw by performing the blend for each subpixel, instead of pixel (e.g. dual-source blending in opengl) And there's only one Alpha channel, so this extra coverage data can't leave Cairo to reach the compositor through there. Therefore, it can't work as intended if output text alpha != bar background alpha. Disable it for those cases, enable it elsewhere As for color emojis, they are RGBA bitmaps. If drawn with text alpha=1.0 and background alpha=1.0 (should be completely opaque bar), then with 'CAIRO_OPERATOR_SOURCE' then texels with alpha < 1.0 result in a blend with whatever's behind the bar, instead of the bar background
2021-02-04Make command line option lists constManuel Stoeckl
2021-02-04Make Wayland request listeners static const when possibleManuel Stoeckl
2021-01-16Changed fprintf(stdout,...) to printf(...) for more readable codeSpizzyCoder
2021-01-11Fix #5940Mukundan314
Fallback to focused_statusline instead of statusline on focused output
2021-01-08man: update maintainerSimon Ser
Also remove the AUTHORS section from swaybar-protocol(7), for consistency with the rest of the man pages.
2020-12-09build: introduce sd-bus-provider optionSimon Ser
This allows to select a specific provider for the sd-bus library.
2020-10-12swaybar: don't expand separator_block_width if separator is falseLudvig Michaelsson
When swaybar receives the following JSON body [ { "full_text": "foo", "separator": false, "separator_block_width": 0 }, { "full_text": "bar" } ] it should not draw any separator or any space between the two blocks. However, since swaybar calculates that separator_block_width 0 is too small to fit any configured separator, it will override the separator_block_width with some non-zero value. This patch changes that such that the necessary separator_block_width is only expanded if the block has 'separator: true'. This should be in line to what i3 does, as its documentation of the i3bar protocol for separator states that "[...] if you disable the separator line, there will still be a gap after the block, unless you also use separator_block_width".
2020-10-11Add support for workspace_min_width bar option.Tarmack
2020-08-04Document required '\n' in swaybar-protocolHubert Hirtz
The following statusbar output is not considered by sway to be following the swaybar-protocol: {"version":1}[[{"full_text":"2.89","urgent":false}], However this one is: {"version":1}\n[[{"full_text":"2.89","urgent":false}], Both outputs contain a header with the required values and an unfinished array of objects with the required values, but the first one is showed verbatim.
2020-07-22swaybar: allow status line cleanup to proceed when hiddenCharmander
`determine_bar_visibility` stops and starts the status command process according to the bar’s visibility. If the bar was hidden during teardown, teardown would stall while waiting for the stopped status command process to exit. This resumes a stopped status command during teardown and allows, for example, sway to reload or quit without leaving a swaybar instance behind each time. Fixes #5536. CONT before TERM as requested in review.
2020-06-12swaybar: ensure correct init order for status_lineLuke Drummond
`$WAYLAND_SOCKET` is unset by `wl_display_connect` after it has successfully connected to the wayland socket. However, subprocesses spawned by swaybar (status-command) don't have access to waybar's fds as $WAYLAND_SOCKET is O_CLOEXEC. This means any status command which itself tries to connect to wayland will fail if this environment variable is set. Reorder display and status-command initialization so that this variable is not set and add an assert so we can enforce this invariant in future.
2020-05-20swaybar: add NULL check when listing workspacesMilkey Mouse
For some reason my version of sway doesn't show workspace names: $ swaymsg -t get_outputs Output HDMI-A-1 '(null) (null) (null)' (inactive) Output HDMI-A-2 '(null) (null) (null)' (inactive) Which is weird, but it's no reason to crash swaybar. The field is totally missing from the JSON, so it ends up doing strcmp(NULL, name) which is undefined behavior.
2020-04-30Fix typo in swaybar-protocol.7.scdJames Mills
2020-04-28swaybar: Fix scrolling with precise trackpadsMartin Dørum