aboutsummaryrefslogtreecommitdiffstats
Commit message (Collapse)AuthorAge
...
* handle_layer_shell_surface: do not use noop outputLibravatar Brian Ashworth2019-02-25
| | | | | | | | If the noop output is focused (all other outputs disabled/disconnected), do not auto assign a layer surface to it. The noop output is not enabled and does not have the `output->layers` list initialized. It also does not make sense to map the layer surfaces to something that is not visible.
* view: set xdg_decoration->view to NULL, check decoration destroyLibravatar Rouven Czerwinski2019-02-25
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Fixes heap-use-after-free: ==32046==ERROR: AddressSanitizer: heap-use-after-free on address 0x615000064d20 at pc 0x55571ce4d303 bp 0x7fff545c64c0 sp 0x7fff545c64b0 WRITE of size 8 at 0x615000064d20 thread T0 #0 0x55571ce4d302 in xdg_decoration_handle_destroy ../sway/xdg_decoration.c:13 #1 0x7f64009d6f36 in wlr_signal_emit_safe ../util/signal.c:29 #2 0x7f64009d3c46 in toplevel_decoration_handle_resource_destroy ../types/wlr_xdg_decoration_v1.c:65 #3 0x7f6400a19f8d (/usr/lib/x86_64-linux-gnu/libwayland-server.so.0+0x7f8d) #4 0x7f6400a19fed in wl_resource_destroy (/usr/lib/x86_64-linux-gnu/libwayland-server.so.0+0x7fed) #5 0x7f64009d3d1f in toplevel_decoration_handle_surface_destroy ../types/wlr_xdg_decoration_v1.c:82 #6 0x7f64009d6f36 in wlr_signal_emit_safe ../util/signal.c:29 #7 0x7f64009b059c in reset_xdg_surface ../types/xdg_shell/wlr_xdg_surface.c:453 #8 0x7f64009b0688 in destroy_xdg_surface ../types/xdg_shell/wlr_xdg_surface.c:483 #9 0x7f64009af08c in xdg_client_handle_resource_destroy ../types/xdg_shell/wlr_xdg_shell.c:71 #10 0x7f6400a19f8d (/usr/lib/x86_64-linux-gnu/libwayland-server.so.0+0x7f8d) #11 0x7f6400a1e211 (/usr/lib/x86_64-linux-gnu/libwayland-server.so.0+0xc211) #12 0x7f6400a1e6fe (/usr/lib/x86_64-linux-gnu/libwayland-server.so.0+0xc6fe) #13 0x7f6400a1a0ec in wl_client_destroy (/usr/lib/x86_64-linux-gnu/libwayland-server.so.0+0x80ec) #14 0x7f6400a1a1c4 (/usr/lib/x86_64-linux-gnu/libwayland-server.so.0+0x81c4) #15 0x7f6400a1b941 in wl_event_loop_dispatch (/usr/lib/x86_64-linux-gnu/libwayland-server.so.0+0x9941) #16 0x7f6400a1a569 in wl_display_run (/usr/lib/x86_64-linux-gnu/libwayland-server.so.0+0x8569) #17 0x55571ce4c7fd in server_run ../sway/server.c:214 #18 0x55571ce4ad59 in main ../sway/main.c:405 #19 0x7f640071109a in __libc_start_main (/lib/x86_64-linux-gnu/libc.so.6+0x2409a) #20 0x55571ce2cfa9 in _start (/usr/local/bin/sway+0x35fa9) 0x615000064d20 is located 32 bytes inside of 504-byte region [0x615000064d00,0x615000064ef8) freed by thread T0 here: #0 0x7f6401531b70 in free (/usr/lib/x86_64-linux-gnu/libasan.so.5+0xedb70) #1 0x55571ce6c72b in destroy ../sway/desktop/xdg_shell.c:252 #2 0x55571cee3f7b in view_destroy ../sway/tree/view.c:60 #3 0x55571cee4090 in view_begin_destroy ../sway/tree/view.c:73 #4 0x55571ce6dd95 in handle_destroy ../sway/desktop/xdg_shell.c:464 #5 0x7f64009d6f36 in wlr_signal_emit_safe ../util/signal.c:29 #6 0x7f64009b059c in reset_xdg_surface ../types/xdg_shell/wlr_xdg_surface.c:453 #7 0x7f64009b0688 in destroy_xdg_surface ../types/xdg_shell/wlr_xdg_surface.c:483 #8 0x7f64009af08c in xdg_client_handle_resource_destroy ../types/xdg_shell/wlr_xdg_shell.c:71 #9 0x7f6400a19f8d (/usr/lib/x86_64-linux-gnu/libwayland-server.so.0+0x7f8d) previously allocated by thread T0 here: #0 0x7f6401532138 in calloc (/usr/lib/x86_64-linux-gnu/libasan.so.5+0xee138) #1 0x55571ce6df39 in handle_xdg_shell_surface ../sway/desktop/xdg_shell.c:485 #2 0x7f64009d6f36 in wlr_signal_emit_safe ../util/signal.c:29 #3 0x7f64009b0167 in handle_xdg_surface_commit ../types/xdg_shell/wlr_xdg_surface.c:350 #4 0x7f64009ce2a5 in surface_commit_pending ../types/wlr_surface.c:372 #5 0x7f64009ce523 in surface_commit ../types/wlr_surface.c:444 #6 0x7f63ff63ddad in ffi_call_unix64 (/usr/lib/x86_64-linux-gnu/libffi.so.6+0x5dad) Fixes #3759
* input/cursor: allow whole-window bindings on wsLibravatar Brian Ashworth2019-02-25
| | | | | To match i3's behavior, this allows mouse bindings to be triggered over a workspace when `--whole-window` is given.
* move scratchpad: hide visible scratchpad containerLibravatar Brian Ashworth2019-02-25
| | | | | | | This makes it so running `move [to] scratchpad` on a container already in the scratchpad does not return an error. To match i3's behavior, a visible scratchpad container will be hidden and a hidden scratchpad container will be treated as a noop.
* commands/move: reintroduce wrongly removed NULL checkLibravatar Rouven Czerwinski2019-02-25
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Commit d3d7956576341bbbfb60d045175b0e8a44752e0b removed this NULL check, which leads to the following backtrace: #0 0x0000557bd201df46 in node_is_view (node=0x0) at ../sway/sway/tree/node.c:41 #1 0x0000557bd1ff5d4e in seat_get_focus_inactive (seat=0x557bd3fc7580, node=0x0) at ../sway/sway/input/seat.c:968 current = 0x557bd2033485 #2 0x0000557bd2009f24 in cmd_move_container (argc=3, argv=0x557bd46b19c0) at ../sway/sway/commands/move.c:557 new_output_last_focus = 0x0 error = 0x0 node = 0x557bd469f360 workspace = 0x557bd4572ee0 container = 0x557bd469f360 no_auto_back_and_forth = false seat = 0x557bd3fc7580 old_parent = 0x0 old_ws = 0x557bd4572ee0 old_output = 0x557bd411f740 destination = 0x557bd46a0cc0 new_output = 0x557bd411f740 new_output_last_ws = 0x0 focus = 0x557bd469f360 __PRETTY_FUNCTION__ = "cmd_move_container" new_workspace = 0x557bd4572ee0 […] Reintroduce the NULL check to fix the bug. Fixes #3746
* Handle NULL from output_get_active_workspaceLibravatar Brian Ashworth2019-02-25
| | | | | | | | | | This modifies the places where output_get_active_workspace is called to handle a NULL result. Some places already handled it and did not need a change, some just have guard off code blocks, others return errors, and some have sway_asserts since the case should never happen. A lot of this is probably just safety precautions since they probably will never be called when `output_get_active_workspace` is not fully configured with a workspace.
* output_get_active_workspace: check workspaces lengthLibravatar Brian Ashworth2019-02-25
| | | | | | | | | | | | If an output's node was dirty and the transaction was committed before a workspace was moved to or created for the output, the instruction would have a bad value for `state->active_workspace` due to a missing length check in `output_get_active_workspace`. If there was no focus on the output, the first workspace was being returned. If the workspace list was currently empty, the value was either garbage, or in the case of an output being disabled and re-enabled, a workspace that may have been previously freed. This just adds the length check to avoid returning out of bounds value.
* run_as_ipc_client: free response after running the IPC commandLibravatar Rouven Czerwinski2019-02-25
| | | | | | | | | | | | Fixes memory leaks in the form of: Direct leak of 24 byte(s) in 1 object(s) allocated from: #0 0x7f5f7c2f4f30 in __interceptor_malloc (/usr/lib/x86_64-linux-gnu/libasan.so.5+0xedf30) #1 0x563c799569f2 in ipc_recv_response ../common/ipc-client.c:94 #2 0x563c79957062 in ipc_single_command ../common/ipc-client.c:138 #3 0x563c798a56cc in run_as_ipc_client ../sway/main.c:127 #4 0x563c798a6a3a in main ../sway/main.c:349 #5 0x7f5f7b4d609a in __libc_start_main (/lib/x86_64-linux-gnu/libc.so.6+0x2409a)
* ipc-client: free payload after sending it over the socketLibravatar Rouven Czerwinski2019-02-25
| | | | | | | | | | Fixes memory leaks in the form of: Direct leak of 20 byte(s) in 1 object(s) allocated from: #0 0x7f5f7c2f4f30 in __interceptor_malloc (/usr/lib/x86_64-linux-gnu/libasan.so.5+0xedf30) #1 0x563c7995b36a in join_args ../common/stringop.c:268 #2 0x563c798a6a1a in main ../sway/main.c:348 #3 0x7f5f7b4d609a in __libc_start_main (/lib/x86_64-linux-gnu/libc.so.6+0x2409a)
* output_evacuate: call workspace_consider_destroyLibravatar Brian Ashworth2019-02-25
| | | | | | This calls `workspace_consider_destroy` on the workspace that was visible on an output that a workspace was just evacuated to. This prevents having hidden empty workspaces.
* layout cmd: always operate on parent container, like i3Fixes #3724Libravatar Eric Drechsel2019-02-25
|
* Don't use SOCK_CLOEXECLibravatar emersion2019-02-25
| | | | Manually set the CLOEXEC flag instead, since SOCK_CLOEXEC isn't POSIX.
* Add 'visible' key to view json responseLibravatar Yorick van Pelt2019-02-25
|
* Fix drag icon map listener not removedLibravatar emersion2019-02-25
|
* Use container under cursor for mouse bindings1.0-rc3Libravatar Brian Ashworth2019-02-18
| | | | | This matches i3's behavior of executing mouse bindings in regards to the container under the cursor instead of what is focused.
* seat_cmd_cursor: fix typo in expected syntaxLibravatar Brian Ashworth2019-02-18
| | | | This just fixes a typo in the expected syntax for seat_cmd_cursor
* workspace_next_name: fallback to next available numberLibravatar Brian Ashworth2019-02-18
| | | | | | | | This changes `workspace_next_name` to use the next available number as the workspace name instead of the number of outputs. This fixes the case where a number that is already in use could be returned. The workspace numbers in use have no relation to the number of outputs so it makes more sense to use the lowest available number
* Remove refs to unimplemented debuglog commandLibravatar Drew DeVault2019-02-18
| | | | Closes #3695
* Disconnect swaybg instead of killing itLibravatar emersion2019-02-18
| | | | | This is much more reliable. This also fixes race conditions when killing swaybg while it's doing a wl_display_roundtrip.
* Fix Meson subproject boolean default optionsLibravatar emersion2019-02-18
|
* sway-input.5: document wildcard and identifier troubleshootingLibravatar Brian Ashworth2019-02-18
| | | | | | This documents the wildcard character for both inputs and seats. There is also a tip added on trying the wildcard to verify a setting if the identifier does not appear to be working.
* Remove unused header include/sway/tree/output.hLibravatar emersion2019-02-18
|
* Fix reload freeze when not modsetting current modeLibravatar Brian Ashworth2019-02-18
| | | | | | | | | | | | | | | | | | | | | | This fixes the issue of the display freezing on reload with wlroots#1545. On master, all output configs are applied on reload. This may cause an output to have its config applied up to three times, instead of just once. The three cases are: output name, output identifier, and wildcard. Not only is this inefficient, but it can cause swaybg to be spawned and immediately killed. However, swaybg requires two roundtrips of wl_display (to obtain needed globals) before it enters its normal event loop. Modesetting will roundtrip the wl_display. Without modesetting, waitpid for killing swaybg could block infinitely due to swaybg being blocked by wl_display_roundtrip. This only configured an output once. It either uses the wildcard config or creates an empty wildcard config and applies that. This also fixes a bug where an output would not be reset when there is no output config to apply to it.
* tray: fix memory leaksLibravatar Ian Fan2019-02-18
|
* tray: when a service is lost, remove all matching itemsLibravatar Ian Fan2019-02-18
| | | | | Before, only the first matching item would be removed, which could leave stale items.
* Check layout before getting pointer surface coordsLibravatar Vincent Vanlaer2019-02-18
| | | | | This fixes issues of clients at the edge of the screen, like swaybar, ignoring buttons.
* Disable unneeded wlroots subproject featuresLibravatar emersion2019-02-18
|
* tray: use correct parameter to set bus slot to floatingLibravatar Ian Fan2019-02-18
| | | | | Counter-intuitively, `sd_bus_slot_set_floating` expects 0 to set it to floating.
* swaybar: prevent signal handler from firing during terminationLibravatar Ian Fan2019-02-18
| | | | This prevents a heap-use-after-free crash when sway terminates.
* apply_output_config: dpms on before modesetLibravatar Brian Ashworth2019-02-18
| | | | | | | | | | | | On the DRM backend, if an output is dpms'd off and a different output is hotplugged, the CRTC for the output is reclaimed. When modesetting an output without a CRTC, a CRTC will not be given to an output that is not desired to be enabled. This splits setting the dpms state in apply_output_config. If the output should be dpms on, the it is enabled before attempting to modeset. Otherwise, it is dpms'd off after setting everything else. This also adds DPMS_ON to the default output configs.
* seatop_move_tiling: do not move to descendantLibravatar Brian Ashworth2019-02-18
| | | | | | In seatop_move_tiling, it is possible to cause a stack overflow by dragging a container into one of its descendants. This disables the ability to move into a descendant.
* seat: allow tree focus changes while layer focusedLibravatar Brian Ashworth2019-02-18
| | | | | | This allows the focused inactive tree node and visible workspaces to be changed while a surface layer has focus. The layer temporarily loses focus, the tree focus changes, and the layer gets refocused.
* seatop_move_tiling: use tab/stack parent not selfLibravatar Brian Ashworth2019-02-18
| | | | | | | | | | | | When moving a descendant of a tabbed or stacked container, it is possible for the target node to be the node being moved. This causes a segfault in `handle_finish` since the node will be detached and then attempted to be attached to it own parent, which is NULL due to the detach. In this case, the target node should not be set to the node being moved, but the parent of the node. This also allows for a descendant of a tabbed or stacked container to be dragged out of the tabs/stacks and to be a sibling of the tabbbed/stacked container, which was not previously possible.
* subsurface_get_root_coords: break on NULLLibravatar Brian Ashworth2019-02-18
| | | | | | | It is possible for `wlr_surface_is_subsurface` to return true, but `wlr_surface_from_wlr_surface` to be NULL. This adds a NULL check to the value returned by `wlr_surface_from_wlr_surface` and breaks out of the while loop in `subsurface_get_root_coords`.
* cursor: relative-pointer-v1 time is usecLibravatar Brian Ashworth2019-02-18
| | | | | | In handle_cursor_motion, the timestamp passed to `wlr_relative_pointer_manager_v1_send_relative_motion` should be microseconds (not milliseconds) according to relative-pointer-v1 spec.
* Don't remove from scratchpad on move to workspaceLibravatar athrungithub2019-02-18
| | | | | on move container window to another workspace, not remove from scratchpad.
* Fix --version when building from tarballLibravatar emersion2019-02-18
|
* Rebase cursor when a layer surface mapsLibravatar emersion2019-02-18
| | | | | | | Also removes an extraneous arrange_outputs call, it's already called if necessary in arrange_layers. Updates https://github.com/swaywm/sway/issues/3080
* workspace_get_initial_output: handle focused layer1.0-rc2Libravatar Brian Ashworth2019-02-11
| | | | | | | When a layer surface is focused, `seat_get_focused_workspace` will be NULL. This changes `workspace_get_initial_output` to use output of the focus inactive. If the focus inactive is also NULL, then either the first output or the noop output will be used as fallbacks.
* Abort early when XDG_RUNTIME_DIR is not setLibravatar Brian Ashworth2019-02-11
| | | | | | This aborts sway and displays an error message about XDG_RUNTIME_DIR not being set without initializing the wl_display or logging any other information.
* fix misc memory leaksLibravatar Brian Ashworth2019-02-11
| | | | | | | | | This fixes a few misc memory leaks reported by asan: - Items of `config->config_chain` are now freed instead of just the list itself - `bar->swaybar_command` is now freed - The result returned by a seat subcommand is now returned instead of leaked
* ipc: handle unnamed xkb_active_layout_nameLibravatar Brian Ashworth2019-02-11
| | | | | | If the active xkb_layout does not have a name, use `NULL` instead of `json_object_new_string(NULL)`. This also makes it so swaymsg will pretty print this as `(unnamed)`.
* view: remove pointer constraints on unmapLibravatar Brian Ashworth2019-02-11
| | | | | | If the view has any pointer constraints, ensure they are removed before the view is unmapped and the surface is no longer tied to the view.
* input/keyboard: respect solo repeat_{rate,delay}Libravatar Brian Ashworth2019-02-11
| | | | | | If `repeat_rate` or `repeat_delay` is set without the other being set, the default was being used for both. This changes the logic to respect the value given and use the default for the other when only one is set.
* fix double free for mode toggle if bar was invisibleLibravatar Rouven Czerwinski2019-02-11
| | | | | | | | | If the bar was set to "invisible" and subsequently "toggle" was send twice, the new mode was never set and the bar->mode was double freed. Fix this by not requiring the bar->mode to be "hide" and instead show it unconditionally, because it was either hidden or invisible. Fixes #3637
* container_at_stacked: skip titles when zero pixelsLibravatar Brian Ashworth2019-02-11
| | | | | | | | | | | It is possible to make the title bars have a zero pixel height while stacked, by using a blank font and no padding. This causes a division by zero when attempting to calculate the child index in container_at_stacked, which then results in a segfault when attempting to access the child at that bad index (INT_MIN). This just skips the check to see if the cursor is over a title bar of a child of a stacked container when the title bar height is zero since there will be no title bars.
* bar_cmd_modifier: add support for noneLibravatar Brian Ashworth2019-02-11
| | | | | | | | sway-bar(5) documents `modifier none`, which comes from i3. This implements the functionality for `modifier none` since it was not previously implemented. The bar modifier toggles visibility of the bar when the bar mode is set to hide. When the bar modifier is set to `none`, the ability to toggle visibility of the bar will be disabled.
* seat_configure_tablet_tool: configure xcursorLibravatar Brian Ashworth2019-02-11
| | | | | | | | | | | | | Since a tablet tool provides the WL_SEAT_CAPABILITY_POINTER capability, sway will attempt to use the xcursor manager to set a cursor image. If the tablet tool was the first (and possibly only) device to provide the capability for the seat, the xcursor manager was not being configured before attempting to set a cursor image. This was due to `seat_configure_xcursor` only being called in `seat_configure_pointer`. Since the xcursor manager was NULL in this case, it would cause a segfault when attempting to set a cursor image. This adds a call to `seat_configure_xcursor` in `seat_configure_tablet_tool` to ensure that the seat has a xcursor manager.
* load_main_config: use given path, store realpathLibravatar Brian Ashworth2019-02-11
| | | | | | | | | | | Since `load_include_config` compares against the realpath of a config file when checking if a config has already been added, the main config's realpath has to be added to the config_chain. However, includes from the main config should be processed relative to the path given to allow for symbolic links. This stores the realpath in `config->config_chain`, but uses the given path for all other operations.
* Clarify error for options and positional argsLibravatar Brian Ashworth2019-02-11
| | | | | | | | | | | | When both options and positional arguments are given, sway would print the error `Don't use options with the IPC client`. Over the past several months, it seems like users are including this error message in issues instead of a debug log due to not understanding that the error message means there is an issue with their command. This makes the error message more verbose and will hopefully make it so more users understand that the message is not a bug in sway, but with the command used.