aboutsummaryrefslogtreecommitdiff
path: root/swaybar/ipc.c
AgeCommit message (Collapse)AuthorLines
2025-03-20stringop: fix has_prefix() arg order in config parsingFurkan Sahin-1/+1
has_prefix() expects the prefix to be the 2nd argument, not the first. The config parsing was broken when using `--input-device=`. Introduced by: 86d128b708d76a76587d4ce796b567ba4be36e66 "Use has_prefix() instead of strncmp() throughout"
2025-01-07Use has_prefix() instead of strncmp() throughoutFurkan Sahin-2/+3
This is safer than hardcoded string lengths.
2024-09-25swaybar: Fix 100% cpu usage if dbus dies.Furkan Sahin-2/+1
Currently, swaybar does not gracefully die if it detects that the dbus connection was lost. Although it's not recommended to restart dbus without restarting the compositor, it can very easily happen. In the case it does, compositor's tray should not consume 100% cpu until it has to be force killed. apply suggestions just setting the bar to not running will call teardown and unref the dbus.
2024-02-16Define _POSIX_C_SOURCE globallyFurkan Sahin-1/+0
See discussion in https://gitlab.freedesktop.org/wlroots/wlroots/-/merge_requests/4555
2023-05-04swaybar: always subscribe to mode and workspaceFurkan Sahin-6/+3
always subscribe to mode and workspace events, since we might need them after bar config updates even if we don't need them initially.
2022-07-01Reuse parsed PangoFontDescriptionFurkan Sahin-4/+5
Avoids parsing the configured font each time text is rendered.
2021-10-25refactor: use JSON_MAX_DEPTH everywhereFurkan Sahin-1/+1
2021-03-22swaybar: fail gracefully on tokener creation failFurkan Sahin-1/+10
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 responseFurkan Sahin-3/+8
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.
2020-10-03Add support for workspace_min_width bar option.Furkan Sahin-0/+6
2020-05-20swaybar: add NULL check when listing workspacesFurkan Sahin-1/+1
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-03-05swaybar: fix memory leaksFurkan Sahin-1/+1
2020-02-26Only destroy swaybar surface via ipc when neededFurkan Sahin-1/+3
2019-12-27parse_color: return success + drop fallback colorFurkan Sahin-111/+36
This is the first in a series of commits to refactor the color handling in sway. This changes parse_color to return whether it was success and no longer uses 0xFFFFFFFF as the fallback color. This also verifies that the string actually contains a valid hexadecimal number along with the length checks. In the process of altering the calls to parse_color, I also took the opportunity to heavily refactor swaybar's ipc_parse_colors function. This allowed for several lines of duplicated code to be removed.
2019-09-02swaybar: complete barconfig_update event handlingFurkan Sahin-160/+207
This adds complete support for the barconfig_update ipc event. This also changes the bar command and subcommand handlers to correctly emit the event. This makes it so all bar subcommands other than id and swaybar_command are dynamically changeable at runtime. sway-bar.5 has been updated accordingly
2019-04-24swaybar: hide mode visibility improvementsFurkan Sahin-0/+9
This allows swaybar to become visible when the mode changes (to any mode other than the default). swaybar will be hidden again when the modifier is pressed and released or when switching back to the default mode. This also applies the same logic to visible by urgency to hide swaybar when the modifier is pressed and released. These changes are to match i3's behavior.
2019-01-23Make json-c include respect pkg-config --cflagsFurkan Sahin-1/+1
json-c.pc contains `Cflags: -I${includedir}/json-c`, so `<json-c/json.h>` won't be found unless the parent directory is searched by default.
2019-01-22swaybar: fix command malloc in workspace commandFurkan Sahin-1/+1
This fixes a typo on the malloc line in ipc_send_workspace_command. The plus one to the size for the null-terminator was outside of the malloc call, which was causing the incorrect pointer to be freed later in the function.
2019-01-22swaybar: fix workspace commandFurkan Sahin-4/+21
Escape quotes and backslashes, allowing switching to workspace names like "1" (including quotes) and \
2019-01-22util.c: remove numlen functionFurkan Sahin-5/+6
Its uses have been replaced by snprintf, which is more in line with its usage.
2019-01-20Replace wlr_log with sway_logFurkan Sahin-7/+7
This commit mostly duplicates the wlr_log functions, although with a sway_* prefix. (This is very similar to PR #2009.) However, the logging function no longer needs to be replaceable, so sway_log_init's second argument is used to set the exit callback for sway_abort. wlr_log_init is still invoked in sway/main.c This commit makes it easier to remove the wlroots dependency for the helper programs swaymsg, swaybg, swaybar, and swaynag.
2019-01-16Fixes for small existing bugs.Furkan Sahin-1/+1
2019-01-16Remove usage of VLAs.Furkan Sahin-1/+2
2019-01-15bar_cmd_tray_bind: Use mouse button helpersFurkan Sahin-5/+7
This modifies `bar_cmd_tray_bindsym` to use `get_mouse_bindsym` for parsing mouse buttons. This also introduces `bar_cmd_tray_bindcode`, which will use `get_mouse_bindcode` for parsing mouse buttons. Like with sway bindings, the two commands are encapsulated in a single file to maximize shared code. This also modifies tray bindings to work off of events codes rather than x11 buttons, which allows for any mouse buttons to be used. For `get_bar_config`, `event_code` has been added to the `tray_bindings` section and will include to event code for the button. If the event code can be mapped to a x11 button, `input_code` will still be the x11 button number. Otherwise, `input_code` will be `0`.
2019-01-13Merge pull request #3344 from RedSoxFan/bar-mouse-bindings-improvedFurkan Sahin-1/+1
Improve mouse button parsing: bar mouse bindings
2019-01-11swaybar: add status_edge_padding commandFurkan Sahin-1/+6
This adds the bar subcommand `status_edge_padding <padding>` to set the padding used when the status line is on the right edge of the bar.
2019-01-10swaybar: add status_padding commandFurkan Sahin-1/+5
Adds the bar subcommand `status_padding <padding>` which allows setting the padding used for swaybar. If `status_padding` is set to `0`, blocks will be able to take up the full height of the bar.
2019-01-10bar_cmd_bind: utilize mouse button helpersFurkan Sahin-1/+1
This modifies `bar_cmd_bindsym` to use `get_mouse_bindsym` for parsing mouse buttons. This also introduces `cmd_bar_bindcode`, which will use `get_mouse_bindcode` for parsing mouse buttons. Like sway bindings, the two commands are encapsulated in a single file with shared code. This also modifies swaybar to operate off of event codes rather than x11 button numbers, which allows for any mouse button to be used. This introduces two new IPC properties: - For `get_bar_config`, `event_code` has been added to the `bindings` section and will include to event code for the button. If the event code can be mapped to a x11 button, `input_code` will still be the x11 button number. Otherwise, `input_code` will be `0`. - Likewise for `click_events`, `event` has been added and will include the event code for the button clicked. If the event code can be mapped to a x11 button, `button` will still be the x11 button number. Otherwise, `button` will be `0`.
2018-12-11swaybar: do not create tray if hiddenFurkan Sahin-0/+1
2018-12-09swaybar: implement tray configFurkan Sahin-0/+34
2018-11-28Implement bar gapsFurkan Sahin-1/+41
Adds the bar subcommand `gaps <amount>|<horizontal> <vertical>|<top> <right> <bottom> <left>` to set gaps for swaybar. Due to restrictions on margins for a layer_surface, only the sides that are anchored to an edge of the screen can have gaps. Since there is support for per-side outer gaps for workspaces, those should be able to be used instead for the last side.
2018-11-17Implement strip_workspace_name.Furkan Sahin-3/+26
2018-10-25swaybar: reverse order of workspaces listFurkan Sahin-1/+1
This makes it congruent with its visual appearance, making it easier to reason about.
2018-10-12swaybar: show hidden bar on urgencyFurkan Sahin-3/+9
2018-10-12swaybar: show hidden bar on key eventFurkan Sahin-1/+18
Since wayland does not currently allow swaybar to create global keybinds, this is handled within sway and sent to the bar using a custom event, so as not to pollute existing events, called bar_state_update.
2018-10-12swaybar: handle mode/hidden_state changesFurkan Sahin-2/+44
As well as adding the hidden_state property to the bar config struct, this commit handles barconfig_update events when the mode or hidden_state changes, and uses a new function determine_bar_visibility to hide or show the bar as required, using, respectively, destroy_layer_surface, which is also newly added, and add_layer_surface, which has been changed to allow dynamically adding the surface.
2018-10-12swaybar: streamline ipc handlingFurkan Sahin-13/+15
The received json is handled outside of the case statement, which will allow better extensibility. This commit also introduces the variable bar_is_dirty, the return value signifying whether the bar requires rendering.
2018-10-12swaybar: move mode & mode_pango_markup to bar structFurkan Sahin-8/+3
This distinguishes the binding mode from the distinct config mode, as well as removing mode_pango_markup from the config struct where it should not be present.
2018-09-30swaybar: only subscribe to required eventsFurkan Sahin-2/+6
This adds barconfig_update to the list of subscribed events, as well as checking when the other events need to be subscribed to.
2018-09-30swaybar: save id upon startupFurkan Sahin-3/+3
This adds an id property to the bar, which will be used to filter barconfig_update events
2018-10-09bar-bindsym: address ianyfan's commentsFurkan Sahin-0/+2
2018-10-08Implement bar bindsymFurkan Sahin-0/+24
2018-09-24swaybar: remove unused focused_output propertyFurkan Sahin-1/+0
2018-09-24swaybar: fail if bar id is invalidFurkan Sahin-3/+15
2018-09-03Change _XOPEN_SOURCE defines to _POSIX_C_SOURCEFurkan Sahin-1/+1
2018-08-30Fix feature macros for FreeBSDFurkan Sahin-1/+1
On FreeBSD, snprintf and vsnprintf are visible only if _XOPEN_SOURCE >= 600.
2018-07-17swaybar: Read urgent colors from IPCFurkan Sahin-0/+12
2018-07-09Update for swaywm/wlroots#1126Furkan Sahin-2/+2
2018-04-24Fix a bunch of swaybar memory leaksFurkan Sahin-11/+2
2018-04-10fix swaybar ipc handlingFurkan Sahin-2/+2
Swap return with break in IPC_EVENT_WORKSPACE case to free resp. Change default return value to true. This causes IPC_EVENT_MODE changes to be rendered instantly.