aboutsummaryrefslogtreecommitdiffstats
Commit message (Collapse)AuthorAge
* Introduce default seatopLibravatar Ryan Dwyer2019-03-17
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This introduces a `default` seat operation which is used when no mouse buttons are being held. This means there is now always a seat operation in progress. It allows us to separate `default` code from the standard cursor management code. The sway_seatop_impl struct has gained callbacks `axis`, `rebase` and `end`, and lost callbacks `finish` and `abort`. `axis` and `rebase` are only used by the default seatop. `end` is called when a seatop is being replaced by another one and allows the seatop to free any resources, though no seatop currently needs to do this. `finish` is no longer required, as each seatop can gracefully finish in their `button` callback. And `abort` is not needed, as calling `end` would achieve the same thing. The struct has also gained a bool named allow_set_cursor which allows the client to set a new cursor during `default` and `down` seatops. Seatops would previously store which button they were started with and stop when that button was released. This behaviour is changed so that it only ends once all buttons are released. So you can start a drag with $mod+left, then click and hold right, release left and it'll continue dragging while the right button is held. The motion callback now accepts dx and dy. Most seatops don't use this as they store the cursor position when the seatop is started and compare it with the current cursor position. This approach doesn't make sense for the default seatop though, hence why dx and dy are needed. The pressed_buttons array has been moved from the sway_cursor struct to the default seatop's data. This is only used for the default seatop to check bindings. The total pressed button count remains in the sway_cursor struct though, because all the other seatops check it to know if they should end. The `down` seatop no longer has a `moved` property. This was used to track if the cursor moved and to recheck focus_follows_mouse, but seems to work without it. The logic for focus_follows_mouse has been refactored. As part of this I've removed the call to wlr_seat_keyboard_has_grab as we don't appear to use keyboard grabs. The functions for handling relative motion, absolute motion and tool axis have been changed. Previously the handler functions were handle_cursor_motion, handle_cursor_motion_absolute and handle_tool_axis. The latter two both called cursor_motion_absolute. Both handle_cursor_motion and cursor_motion_absolute did very similar things. These are now simplified into three handlers and a single common function called cursor_motion. All three handlers call cursor_motion. As cursor_motion works with relative distances, the absolute and tool axis handlers convert them to relative first.
* Replace seatup allows_events with button callbackLibravatar Ryan Dwyer2019-03-17
|
* config/output: revamp identifier/name layeringLibravatar Brian Ashworth2019-03-16
| | | | | | | | | | | | | | | | | | | | | | This revamps the way that output configs are handled when referencing an output by both identifier and name. If an output is always referred to by name or by identifier, this should have no noticeable change. As soon as there is a name output config and an identifier output config that matches an output, an output config is generated that is named `<identifier> on <name>` that is generated with the identifier output config merged on top of the name output config and stored. When a change to either is stored, the delta is merged on top of that "id on name" output config, as well. If the "id on name" output config exists, it has the highest precedence and will be used when applying a config to the output. This fixes the following case: - `swaymsg output <name> bg /path/to/wallpaper1 fill` - `swaymsg output <identifier> bg /path/to/wallpaper2 fill` - `swaymsg output <name> dpms on` Without this, the wallpaper is changed to `/path/to/wallpaper1`. With this, the wallpaper remains `/path/to/wallpaper2`.
* Fix output config retrieval for new outputsLibravatar Brian Ashworth2019-03-16
| | | | | | | | | | | | | | | | | | | This removes `output_find_config`, which would take the first matching output config it found. This is fine if only a name output config, identifier output config, or even just wildcard exist, but if there is a name output config and identifier output config, they are not merged. Instead, this introduces find_output_config, which is just a wrapper for `get_output_config`. This ensures that both the name and identifier output configs are respected. This fixes the following case: - For simplicity in this example, remove all output configs from config - Run `swaymsg output <name> bg #ff0000 solid_color` - Run `swaymsg output <identifier> scale 2` - Disconnect and reconnect output Without this, the output will have the background, but not the scale. With this, the output will have both the background and scale
* Flush stdout in swaymsg when in subscribe modeLibravatar Flakebi2019-03-16
|
* Fix quoting of commands passed to for_windowLibravatar minus2019-03-15
| | | | | | E.g. `for_window [class="mpv"] move container to output "Dell Inc. ..."` does not work because the executed move command only uses `Dell` as output name.
* output_cmd_background: validate colorsLibravatar Brian Ashworth2019-03-15
| | | | | This validates the color and fallback color in `output_cmd_background` to ensure that only colors of the form `#RRGGBB` are accepted.
* Set prev_workspace_name based off of focusLibravatar Brian Ashworth2019-03-14
| | | | | | | | | This moves setting `seat->prev_workspace_name` from `workspace_switch` to `set_workspace`. `workspace_switch` is only called when using a `workspace` command to change the workspace so any workspace change based on criteria was not altering `seat->prev_workspace_name`. By moving it to `set_workspace`, which is called by `seat_set_focus`, it will change any time focus changes to a node on a different workspace
* swaybar: fix loading of malformed icon themeLibravatar Stephan Hilb2019-03-13
| | | | | | | If the icon index.theme contained a key-value pair without a preceding group header, entry_handler() would be called with a zero pointer and lead to a segfault. Set the error flag and break on such malformed files.
* xwayland: handle floating configure request sizeLibravatar Brian Ashworth2019-03-13
| | | | | | | | | | | This makes it so the container gets resized by a configure request for xwayland floating views. The minimum and maximum sizes are also respected. Previously, the configure request was resizing the surface to the size requested, but never changing the container size. This caused the surface to be rendered outside of the container or to be smaller than the container. The former is never ideal and the latter makes no sense for floating views since the container itself can just be shrunk.
* criteria: change workspace to support regexLibravatar Brian Ashworth2019-03-12
| | | | | This changes the workspace criteria to support regex instead of basic strings. This matches i3's behavior.
* Handle seat_get_focused_workspace returning NULLLibravatar Brian Ashworth2019-03-12
| | | | | This modifiers the callers of seat_get_focused_workspace to handle getting NULL as the return value, if they did not already.
* config.in: allow launch apps with args via dmenuLibravatar 3ap2019-03-12
| | | Without this change you can't execute apps with command line arguments (e.g. firefox -P profile) because -P will be parsed as argument for "swaymsg exec".
* get_deco_rect: fix floaters on tabbed/stacked wsLibravatar Brian Ashworth2019-03-11
| | | | | | | | | | | This fixes the decoration rects for floating containers on a workspace that is either tabbed or stacked. Without this, the floater would incorrectly try to calculate where it's tab or stack decorations were on the workspace. This would cause a SIGFPE (due to a divide-by-zero) when the floater was on a tabbed workspace without any tiling children. Furthermore, the floater does not care what the workspace's layout is and should just use the location relative to the workspace. This should have no effect on children of a floating container.
* Repair swaynag crash reading message from stdinLibravatar Peter Grayson2019-03-11
| | | | | | | | | | | | | | | | | When swaynag is run with the -l/--detailed-message option, a crash may occur if the detailed message read from stdin is large enough. E.g.: swaynag -m hello -l < ~/.config/sway/config The root cause is that the read_from_stdin() function under-allocates memory for the destination buffer which causes that buffer to be overflowed when copying line data to it with snprintf(). The repair is to allocate one more byte for the terminating null byte. N.B. although getline() returns the number of bytes read excluding a terminating null byte, the line buffer is terminated with a null byte. Thus we have a guarantee that the line buffer will be null terminated (which is important when copying with snprintf()).
* commands: allow tiled sticky containers to be movedLibravatar Ian Fan2019-03-11
| | | | | Namely, to a workspace on the same output. However, tiled sticky children of floating containers are still restricted.
* Stop using wlr_output->{lx,ly}Libravatar emersion2019-03-11
| | | | | Also fixes sway_output->{lx,ly,width,height} not being updated. Also fixes output_get_in_direction adding buffer coords to layout coords.
* Fix size_t temporary underflow in log_loaded_themesLibravatar emersion2019-03-11
| | | | | | | `len` will underflow but will overflow right after, so it's not as bad as it may appear. Still better not to under/overflow at all. Fixes https://github.com/swaywm/sway/issues/3862
* Fix click behaviourLibravatar Ryan Dwyer2019-03-11
| | | | | | | | | By the time seatop_allows_events was called, seatop_impl was already NULL, causing the function to always return false. This means a press event was sent to clients without a corresponding release event. This patch moves the call to seatop_finish to after the seatop_allows_events check.
* Don't send button events to surfaces when dragging or resizingLibravatar Ryan Dwyer2019-03-11
| | | | | | | | | | | It turns out sending button events during all seat operations is not desirable. This patch introduces a new property `seatop_impl.allows_events` which allows each operation to define whether button events should be passed to the surface or not. The `down` seat operation is the only one that supports this. As all the other seatops don't support it, the calls to seat_pointer_notify_button prior to starting them have been removed.
* stringop.c: refactor a few functionsLibravatar Ian Fan2019-03-11
|
* stringop.c: clean up headersLibravatar Ian Fan2019-03-11
|
* stringop.c: remove unused functionsLibravatar Ian Fan2019-03-11
| | | | The only use of `join_list` in swaybar/tray/icon.c has been rewritten.
* sway_view_child: add listener for view unmapLibravatar Brian Ashworth2019-03-11
| | | | | | | | | | Since not all child views's have an unmap event, it is possible for it to still be mapped (default state) in the destruction handler. When the destruction handler is called, the corresponding view may have already been freed and the memory location reallocated. This adds a listener for the view unmapping and removes the mapped status. This ensures that the child view is damaged due to destruction while the view still exists and not after.
* detect_proprietary: use strncmpLibravatar Brian Ashworth2019-03-10
| | | | | Only the main nvidia module needs to be blocked. Others such as nvidiafb are benign and do not need to be blocked
* fullscreen: init floating on disable without sizeLibravatar Brian Ashworth2019-03-10
| | | | | | | If a container gets mapped as fullscreen and set to floating by criteria, the size and location are never set for the floating container. This adds a check in container_fullscreen_disable for a width or height of 0 and calls container_init_floating
* meson: use pkg-config var for scdoc pathLibravatar emersion2019-03-10
|
* Make raw keysyms take precedence over translatedLibravatar Ben Challenor2019-03-10
| | | | | Allows both BackSpace and Shift+BackSpace to be bound under the US keyboard layout, per #3705.
* Fix crash in cmd_workspace when layer surface has focusLibravatar emersion2019-03-10
|
* Update language in sway.desktop & sway(1)Libravatar Drew DeVault2019-03-10
|
* arrange: use int not size_t for title offsetsLibravatar Brian Ashworth2019-03-10
| | | | | | | | | This changes `apply_tabbed_layout` and `apply_stacked_layout` to use `int` instead of `size_t`. This is necessary for tabbed and stacked containers to be positioned correctly when the y-location is negative. The reasoning for this is signed plus unsigned is always an unsigned value. This was causing the y-location of the container to be positioned near `INT_MIN` due to an unsigned integer underflow
* damage: remove output_damage_viewLibravatar Brian Ashworth2019-03-10
| | | | | | | This removes `output_damage_view` since it is unnecessary. The logic has been moved into its only caller `output_damage_from_view`. When damaging the whole view, `output_damage_whole_container` should be used instead
* output_damage_whole_container: damage subsurfacesLibravatar Brian Ashworth2019-03-10
| | | | | | | | This adds an iterative call in `output_damage_whole_container` to damage the subsurfaces for all visible views that are inside of the container. This is needed to damage subsurfaces that extend outside the box of the container. Without this, those subsurfaces will create artifacts when moving or resizing.
* fix "directive argument is null" errorsLibravatar Jeff Peeler2019-03-09
|
* Fix crash when moving window to scratchpadLibravatar minus2019-03-09
|
* Add missing swaymsg completionsLibravatar Peter Grayson2019-03-08
| | | | | | | | | The `-m/--monitor` option was missing from the bash and fish completions. The `subscribe` IPC message type was missing from the bash, fish, and zsh completions. Signed-off-by: Peter Grayson <pete@jpgrayson.net>
* Add -p/--pretty option to swaymsgLibravatar Peter Grayson2019-03-08
| | | | | | | | | | | This new option forces pretty (non-raw/non-JSON) output. By default, when not using a tty, swaymsg outputs using the "raw" format. This makes it impossible to, for example, pipe the pretty output to a pager such as `less` since piping does not use a tty. The new -p/--pretty option gives the user explicit control over the output format while retaining the default tty-dependent behavior. Signed-off-by: Peter Grayson <pete@jpgrayson.net>
* ipc: describe libinput device configurationLibravatar Brian Ashworth2019-03-07
| | | | | | | | This adds the device configurations to the ipc response for libinput devices. Only supported configuration options for the device will be added. This also moves `libinput_send_events` inside a new `libinput` object that contains the rest of the configuration options. sway-ipc(7) has been updated to reflect the changes and document the new additions.
* ipc: fix fullscreen deco_rectLibravatar Brian Ashworth2019-03-06
| | | | | | This fixes the deco_rect reported by the ipc for fullscreen containers to be all zeroes. Children of the fullscreen container should still have their decorations reported correctly
* ipc: fix rect for stacked childrenLibravatar Brian Ashworth2019-03-06
| | | | | This now takes all titlebars for stacked children into account for the ipc property `rect`
* Fix container_parent_layout for scratchpad windowsLibravatar emersion2019-03-06
|
* ipc: change {,deco_}rect to match i3Libravatar Brian Ashworth2019-03-06
| | | | | | | | | | | | This fixes the `deco_rect` and `rect` properties in the IPC responses to match i3's behavior. `deco_rect` should be relative to the parent node, not the current node. This also takes tabbed and stacked decorations into account and will calculate `deco_rect` for all containers since tabbed and stacked child containers will have decorations. `rect` should exclude the window decorations.
* Set DISPLAY after initializing XwaylandLibravatar emersion2019-03-04
| | | | This is necessary after https://github.com/swaywm/wlroots/pull/1596
* meson: update scdoc requirement to >= 1.9.2Libravatar Brian Ashworth2019-03-04
| | | | | | | | Since scdoc 1.9.1 is bugged, this updates the meson version check to >= 1.9.2 and drops the version requirement from the README. This should make it more obvious to users who have 1.9.1 that they need to update scdoc to be able to compile man pages and hopefully cut down on the duplicate issues
* Allow concurrent clicksLibravatar Ryan Dwyer2019-03-04
| | | | | | | | | | | | | | | | | | | | | If two cursor buttons are pressed at the same time, the client will now be notified of the second button press. The main reason for not sending the concurrent presses was due to an early return in dispatch_cursor_button if a seatop is in progress. This patch makes it call seat_pointer_notify_button prior to returning. But it also has to make sure there's not a mismatch in events such as a release without a press. Prior to this patch, the down seatop would send press and release events in its begin and finish functions. No other seatops did this. A press event would be sent prior to starting tiling drag, but never an associated release. After this patch, no seatops send their own press or release events. We send them prior to calling the seatop begin functions, then the first part of dispatch_cursor_button handles all presses during seatops and when releasing the seatop.
* sway.1.scd: document environment vars set by swayLibravatar Brian Ashworth2019-03-03
| | | | | This just documents the few environment variables set by sway in sway.1.scd
* render_floating: skip fullscreen floatersLibravatar Brian Ashworth2019-03-03
| | | | | | | | If a floater is fullscreen either on a workspace or globally, it should not be rendered on any output is is not fullscreened on. When rendering it on an output it should not be rendered on, there will be an extraneous border along the adjacent side of the output. This adds a check in render_floating to skip all fullscreened floaters
* Fixes crash in spawn_swaybg (closes #3733)Libravatar Noam Preil2019-03-03
|
* floating_maximum_size: change default behaviorLibravatar Brian Ashworth2019-03-02
| | | | | | | | | | | | | This changes the way zero (which is the default) is interpreted for both the width and height of `floating_maximum_size`. It now refers to the width and height of the entire output layout, which matches i3's behavior. This also removes duplicated code to calculate the floating constraints in three files. Before this, `container_init_floating` used two-thirds of the workspace width/height as the max and the entire workspace width/height was used everywhere else. Now, all callers use a single function `floating_calculate_constraints`.
* Minor fix of code duplication.Libravatar hugbubby2019-03-02
| | | | Removes 3~ lines of code that didn't need to be restated.