Simon Ser
414950bbc8
swaybar: fix errno handling in status_handle_readable
...
If getline fails once, it was not reset before the next getline
call. errno is only overwritten by getline on error.
2021-12-21 12:12:54 +01:00
Simon Ser
513fa00a5e
swaymsg: add GET_TREE pretty-printing
2021-12-21 11:07:11 +01:00
Simon Ser
d9ce781d4c
swaymsg: replace if with switch in pretty_print
2021-12-21 11:07:11 +01:00
Sefa Eyeoglu
17ee30d070
build: bump wlroots dependency to 0.16.0
2021-12-19 12:17:13 +01:00
Ronan Pigott
9ecbfe3665
output: emit node::destroy event
...
Now output_begin_destroy emits the node::destroy event similar to
workspace_begin_destroy. It currently has no listeners, since they
listen to output::disable or wlr_output::destroy instead.
2021-12-17 14:39:48 +01:00
Ronan Pigott
ebfe432ec3
output: change output::destroy to output::disable
...
This changes output::destroy to output::disable and emits it only
once when an output is disabled, instead of twice in succession.
2021-12-17 14:39:48 +01:00
RoastVeg
f2b6d1ec29
Handle border width and height on minimum floating sizes
...
This fixes: https://github.com/swaywm/sway/issues/5337
Co-authored-by: Moon Sungjoon <sumoon@seoulsaram.org>
2021-12-14 10:30:10 +01:00
Cole Mickens
0b4e3d39eb
meson.build: require wayland-protocols 1.24
...
As far as I can tell `ZWP_LINUX_DMABUF_FEEDBACK_V1_TRANCHE_FLAGS_SCANOUT` is introduced in wayland-protocols 1.24.
2021-12-14 10:00:15 +01:00
Simon Ser
57a7b3998e
swaynag: remove xdg-output logic
...
We can just get the output name from wl_output directly, now that
wl_output version 4 exists.
2021-12-13 20:17:20 -06:00
Simon Ser
4732325f59
Add support for linux-dmabuf surface hints
...
References: https://gitlab.freedesktop.org/wlroots/wlroots/-/merge_requests/1376
2021-12-13 09:59:33 -06:00
Alexander Orzechowski
8a3026337f
view: Fix null dereference
...
There seems to be a null pointer access that can happen. I was able to
reproduce this by running the cemu emulator[1] with the new collabora
wine wayland driver[2] and opening and closing some sub menus.
Adding a trival null check seems to do the trick to stop sway from
crashing and returning to tty and everything else works normally.
[1]: http://cemu.info/
[2]: https://www.winehq.org/pipermail/wine-devel/2021-December/203035.html
Stack trace from lldb:
* thread #1 , name = 'sway', stop reason = signal SIGSEGV: invalid address (fault address: 0xf8)
frame #0 : 0x00005555555c3fc3 sway`view_child_init(child=0x0000555555f67940, impl=0x00005555555ee030, view=0x00005555565bc590, surface=0x00005555565b6940) at view.c:1117:25
1114 wl_signal_add(&view->events.unmap, &child->view_unmap);
1115 child->view_unmap.notify = view_child_handle_view_unmap;
1116
-> 1117 struct sway_workspace *workspace = child->view->container->pending.workspace;
1118 if (workspace) {
1119 wlr_surface_send_enter(child->surface, workspace->output->wlr_output);
1120 }
(lldb) up
error: sway {0x000342ab}: DIE has DW_AT_ranges(DW_FORM_sec_offset 0x67) attribute, but range extraction failed (invalid range list offset 0x67), please file a bug and attach the file at the start of this error message
frame #1 : 0x00005555555c39f8 sway`view_child_subsurface_create(child=0x00005555564a10d0, wlr_subsurface=0x0000555556586910) at view.c:985:2
982 }
983 subsurface->child.parent = child;
984 wl_list_insert(&child->children, &subsurface->child.link);
-> 985 view_child_init(&subsurface->child, &subsurface_impl, child->view,
986 wlr_subsurface->surface);
987
988 wl_signal_add(&wlr_subsurface->events.destroy, &subsurface->destroy);
(lldb) up
frame #2 : 0x00005555555c3c2a sway`view_child_handle_surface_new_subsurface(listener=0x00005555564a1130, data=0x0000555556586910) at view.c:1031:2
1028 struct sway_view_child *child =
1029 wl_container_of(listener, child, surface_new_subsurface);
1030 struct wlr_subsurface *subsurface = data;
-> 1031 view_child_subsurface_create(child, subsurface);
1032 }
1033
1034 static void view_child_handle_surface_destroy(struct wl_listener *listener,
(lldb) up
frame #3 : 0x00007ffff78f4bfe libwlroots.so.10`wlr_signal_emit_safe(signal=0x00005555565b2470, data=0x0000555556586910) at signal.c:29:3
26 wl_list_remove(&cursor.link);
27 wl_list_insert(pos, &cursor.link);
28
-> 29 l->notify(l, data);
30 }
31
32 wl_list_remove(&cursor.link);
(lldb) up
frame #4 : 0x00007ffff78e5a41 libwlroots.so.10`subsurface_parent_commit(subsurface=0x0000555556586910) at wlr_surface.c:517:3
514
515 if (!subsurface->added) {
516 subsurface->added = true;
-> 517 wlr_signal_emit_safe(&subsurface->parent->events.new_subsurface,
518 subsurface);
519 }
520 }
(lldb) up
frame #5 : 0x00007ffff78e56fa libwlroots.so.10`surface_commit_state(surface=0x00005555565b21b0, next=0x00005555565b2338) at wlr_surface.c:439:3
436 wl_list_insert(&surface->current.subsurfaces_above,
437 &subsurface->current.link);
438
-> 439 subsurface_parent_commit(subsurface);
440 }
441 wl_list_for_each_reverse(subsurface, &surface->pending.subsurfaces_below,
442 pending.link) {
(lldb) up
frame #6 : 0x00007ffff78e5b88 libwlroots.so.10`surface_handle_commit(client=0x0000555556564c80, resource=0x0000555556599a20) at wlr_surface.c:555:3
552 if (surface->pending.cached_state_locks > 0 || !wl_list_empty(&surface->cached)) {
553 surface_cache_pending(surface);
554 } else {
-> 555 surface_commit_state(surface, &surface->pending);
556 }
557 }
558
(lldb) up
frame #7 : 0x00007ffff7000d4a libffi.so.8`___lldb_unnamed_symbol118 + 82
libffi.so.8`___lldb_unnamed_symbol118:
-> 0x7ffff7000d4a <+82>: leaq 0x18(%rbp), %rsp
0x7ffff7000d4e <+86>: movq (%rbp), %rcx
0x7ffff7000d52 <+90>: movq 0x8(%rbp), %rdi
0x7ffff7000d56 <+94>: movq 0x10(%rbp), %rbp
(lldb) up
frame #8 : 0x00007ffff7000267 libffi.so.8`___lldb_unnamed_symbol115 + 439
libffi.so.8`___lldb_unnamed_symbol115:
-> 0x7ffff7000267 <+439>: movq -0x38(%rbp), %rax
0x7ffff700026b <+443>: subq %fs:0x28, %rax
0x7ffff7000274 <+452>: jne 0x7ffff70004e7 ; <+1079>
0x7ffff700027a <+458>: leaq -0x28(%rbp), %rsp
(lldb) up
frame #9 : 0x00007ffff795a173 libwayland-server.so.0`___lldb_unnamed_symbol271 + 371
libwayland-server.so.0`___lldb_unnamed_symbol271:
-> 0x7ffff795a173 <+371>: movq 0x8(%r12), %rax
0x7ffff795a178 <+376>: movq 0x8(%rax), %rdi
0x7ffff795a17c <+380>: movl (%r12), %eax
0x7ffff795a180 <+384>: testl %eax, %eax
(lldb) up
frame #10 : 0x00007ffff795555c libwayland-server.so.0`___lldb_unnamed_symbol210 + 588
libwayland-server.so.0`___lldb_unnamed_symbol210:
-> 0x7ffff795555c <+588>: jmp 0x7ffff7955435 ; <+293>
0x7ffff7955561 <+593>: nopl (%rax)
0x7ffff7955568 <+600>: callq *0xd76a(%rip)
0x7ffff795556e <+606>: cmpl $0xb, (%rax)
(lldb) up
frame #11 : 0x00007ffff795804a libwayland-server.so.0`wl_event_loop_dispatch + 202
libwayland-server.so.0`wl_event_loop_dispatch:
-> 0x7ffff795804a <+202>: addq $0xc, %r15
0x7ffff795804e <+206>: cmpq %r15, %rbp
0x7ffff7958051 <+209>: jne 0x7ffff7958038 ; <+184>
0x7ffff7958053 <+211>: movq 0x8(%rsp), %rcx1
(lldb) up
frame #12 : 0x00007ffff7955bc7 libwayland-server.so.0`wl_display_run + 39
libwayland-server.so.0`wl_display_run:
-> 0x7ffff7955bc7 <+39>: movl 0x8(%rbx), %eax
0x7ffff7955bca <+42>: testl %eax, %eax
0x7ffff7955bcc <+44>: jne 0x7ffff7955bb0 ; <+16>
0x7ffff7955bce <+46>: popq %rbx
(lldb) up
frame #13 : 0x00005555555756eb sway`server_run(server=0x00005555555f0640) at server.c:296:2
293 void server_run(struct sway_server *server) {
294 sway_log(SWAY_INFO, "Running compositor on wayland display '%s'",
295 server->socket);
-> 296 wl_display_run(server->wl_display);
297 }
(lldb) up
frame #14 : 0x0000555555574947 sway`main(argc=1, argv=0x00007fffffffe8d8) at main.c:428:2
425 swaynag_show(&config->swaynag_config_errors);
426 }
427
-> 428 server_run(&server);
429
430 shutdown:
431 sway_log(SWAY_INFO, "Shutting down sway");
(lldb) up
frame #15 : 0x00007ffff761db25 libc.so.6`__libc_start_main + 213
libc.so.6`__libc_start_main:
-> 0x7ffff761db25 <+213>: movl %eax, %edi
0x7ffff761db27 <+215>: callq 0x7ffff7635630 ; exit
0x7ffff761db2c <+220>: movq (%rsp), %rax
0x7ffff761db30 <+224>: leaq 0x163929(%rip), %rdi
(lldb) up
frame #16 : 0x00005555555656be sway`_start + 46
sway`_start:
-> 0x5555555656be <+46>: hlt
0x5555555656bf: nop
sway`deregister_tm_clones:
0x5555555656c0 <+0>: leaq 0x8aeb9(%rip), %rdi ; optind@GLIBC_2.2.5
0x5555555656c7 <+7>: leaq 0x8aeb2(%rip), %rax ; optind@GLIBC_2.2.5
Signed-off-by: Alexander Orzechowski <orzechowski.alexander@gmail.com>
2021-12-13 14:51:13 +01:00
Vsevolod
f7725011ef
Add focused_tab_title
2021-12-10 16:09:29 +01:00
Simon Ser
3f58f12617
Fixup headless output names
...
We use the headless backend to create a special fallback output
used when no other output is connected. However this messes up the
"real" headless output names users have come to expect (e.g.
currently the first headless output will be named "HEADLESS-2"
instead of "HEADLESS-1").
Fix this by setting the output name with [1].
[1]: https://gitlab.freedesktop.org/wlroots/wlroots/-/merge_requests/3395
2021-12-09 10:47:01 -06:00
M.Zeinali
1eaa61f503
readme: use right-to-left marks in ir translation
2021-12-07 15:26:57 +01:00
Kirill Primak
03a29ed36d
output: remove surface buffer damage check
...
A surface can have effective damage even without any buffer damage
committed.
2021-12-06 16:44:34 +01:00
Simon Ser
b518b1295c
Delete .clang-format
...
This file isn't accurate, and clang-format can't describe our code
style.
References: https://github.com/swaywm/sway/pull/6249#issuecomment-986214042
2021-12-06 08:27:11 -06:00
Simon Ser
02b412a3d4
build: use list for sdbus dep
...
This allows to simplify our logic. Meson will pick the first found
library.
2021-11-26 12:10:18 -06:00
Simon Zeni
0cd8efe0bb
sway: replace noop_output by fallback_output
...
wlroots removed the support for the noop backend. Instead we rely on the
headless backend to provide the fallback output.
2021-11-25 17:48:34 +01:00
Simon Ser
729e18bff5
Replace wlr_headless_backend_create_with_renderer call
...
Update for the wlroots breaking change in [1].
[1]: https://gitlab.freedesktop.org/wlroots/wlroots/-/merge_requests/3367
2021-11-25 09:39:06 -06:00
Ludvig Michaelsson
f627cd77d6
swaybar: signal status command's process group
...
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-11-25 12:09:12 +01:00
Aleksei Bavshin
94dc486f0e
ipc: make bar <bar_id> mode|hidden_state
behave as documented
...
sway-bar(5) says:
> For compatibility with i3, bar mode <mode> [<bar-id>] syntax is
> supported along with the sway only bar <bar-id> mode <mode> syntax.
while the actual behavior is that `bar_cmd_mode` ignores already
selected `config->current_bar` and applies the change to all the
configured bars.
2021-11-25 11:32:46 +01:00
Manuel Stoeckl
a23cdbbea1
Add 'output render_bit_depth [8|10]' command
...
This makes it possible to hint to the renderer and backends how many
bits per channel the buffers that the compositor draws windows onto
should have. Renderers and backends may deviate from this if they
do not support the formats with higher bit depth.
2021-11-23 15:51:54 +01:00
Simon Zeni
5865af75cf
sway: create wlr_renderer and wlr_allocator
...
wlroots now required the compositor to create its own wlr_renderer and
wlr_allocator to initialize the wlr_output
2021-11-18 17:47:19 +01:00
Kirill Primak
cbecc5cbae
container: fix surface_is_popup()
2021-11-15 10:12:23 +01:00
Eric Engestrom
bb7bb3676d
sway: allow IPCs on proprietary drivers
...
Proprietary drivers require --unsupported-gpu to be allowed, and IPCs
require no option to be passed.
The only way to satisfy both is to run IPCs before checking for
proprietary drivers.
2021-11-14 10:43:09 +03:00
Manuel Stoeckl
fc25e4944e
Update URL to wlroots project (GitHub->GitLab)
2021-11-02 08:43:24 +01:00
Simon Ser
38020d157d
Bump RLIMIT_NOFILE
...
Wayland compositors handle many file descriptors: client
connections, DMA-BUFs, sync_files, wl_data_device pipes, and so
on. Bump the limit to the max.
Closes: https://github.com/swaywm/sway/issues/6285
2021-10-30 08:19:35 -06:00
bR3iN
9969de9e00
Add smart_gaps inverse_outer command
...
Add a subcommand for `smart_gaps` that enables outer gaps only
on workspaces with exactly one visible child.
Also add documentation for `smart_gaps toggle`.
2021-10-29 13:37:58 +02:00
Rasmus Moorats
aaf68cf423
fix cursor input for layer-shell surfaces
...
previously, fullscreen global containers would grab cursor input
even if a shell-layer surface was on top of it
related issue: https://github.com/swaywm/sway/issues/6501
2021-10-26 15:13:37 +03:00
Jason Nader
9303bed4d4
refactor: use JSON_MAX_DEPTH everywhere
2021-10-25 10:18:40 +02:00
Sefa Eyeoglu
b223f70250
refactor: use sway_abort instead
2021-10-22 09:57:05 +02:00
Sefa Eyeoglu
96baef8ae9
fix: use sane value for json_tokener max_depth
...
INT_MAX causes a NULL pointer if there is not enough memory available to
fit (INT_MAX * sizeof(struct json_tokener_srec)).
2021-10-22 09:57:05 +02:00
Sefa Eyeoglu
944d7031c5
fix: handle NULL from json_tokener_new_ex
...
if there is not enough memory to fit json_tokener and (depth *
json_tokener_srec) in RAM, don't segfault.
2021-10-22 09:57:05 +02:00
siikamiika
21d2fdf74c
view: add new container as a sibling of tiled view
...
If the focused container is floating by itself, create a new container
in tiling mode as a sibling of the inactive focused container instead of
creating it as a sibling of everything that is in tiling mode in that
workspace. This is the i3 behavior.
2021-10-21 13:16:36 -07:00
siikamiika
197d0ab82f
commands/focus: focus view inside container
...
seat_get_focus_inactive_floating and seat_get_focus_inactive_tiling do
not always return a view, so get the previously focused view from the
container with seat_get_focus_inactive_view. This is the i3 behavior.
2021-10-21 13:13:54 -07:00
David Rosca
215787e8b2
xwayland: Clear wlr_xwayland_surface in handle_destroy
...
If the destroyed xwayland view is in transaction, it won't
be destroyed immediately. wlr_xwayland_surface then becomes
dangling pointer.
Closes #6605
Closes #5884
2021-10-19 10:42:19 +03:00
Simon Ser
b48cb6b0ec
Remove --my-next-gpu-wont-be-nvidia
...
Nvidia has historically been a bad actor in the open-source graphics
ecosystem because they required a special EGLStreams code-path
instead of exposing the de-facto standard GBM API. However, with
their upcoming release they now support GBM as well.
This is a push in the right direction for Nvidia, so there's no
reason we should be more hostile to them than to any other proprietary
driver. Let's remove the --my-next-gpu-wont-be-nvidia flag, and advise
users to use --unsupported-gpu now.
Note, proprietary Nvidia drivers are still unsupported by the Sway
project (just like all other proprietary drivers).
2021-10-19 09:26:06 +02:00
Jason Nader
db70f6496c
swaymsg: fix misplaced return value
2021-10-18 14:20:24 +02:00
Jason Nader
55cd8abd76
swaymsg: be explicit about the json parser error
2021-10-18 14:20:24 +02:00
Jason Nader
f873bcc4e1
swaymsg: use INT_MAX max JSON depth when parsing IPC response
...
Same reasoning as fe11caeac9
.
Without this, swaymsg would fail with a cryptic error message
when the JSON was nested too deep.
2021-10-18 14:20:24 +02:00
Nihal Jere
119f31edb4
config.in: use swaynag -B instead of -b
...
'-b' spawns a terminal, which is unnecessary for this use case
2021-10-17 21:30:33 +02:00
Simon Ser
1df2450689
github: don't truncate debug logs
...
This happens a lot, the latest one is [1].
[1]: https://github.com/swaywm/sway/issues/6570
2021-10-17 21:28:51 +02:00
Birger Schacht
ca8c6c3d18
Fix a couple of typos
2021-10-16 02:16:12 -04:00
Simon Ser
0c210a5e68
Handle present events with NULL timespec field
...
See [1].
[1]: https://github.com/swaywm/wlroots/pull/3245
2021-10-15 19:34:03 +02:00
Jonas Große Sundrup
555cd96e05
cross-reference further documentation
2021-10-15 15:20:40 +02:00
Jonas Große Sundrup
35d29185a8
change incorrectly documented output types
2021-10-15 15:20:40 +02:00
Jonas Große Sundrup
bccf76d90b
clarify the type of raw output
2021-10-15 15:20:40 +02:00
siikamiika
f4db502d44
use node_is_view
2021-10-10 09:35:15 +02:00
Jari Ronkainen
624ffa4516
Improve built-in touchscreen detection
...
Adds detection code to handle pci-*-platform-* strings
in ID_PATH
References: https://github.com/swaywm/sway/issues/6590
Signed-off-by: Jari Ronkainen <ronchaine@gmail.com>
2021-10-08 19:09:42 +02:00
Nathan Schulte
83310f5abf
swaybar: fix cairo_font_options leak
2021-10-08 09:33:03 +02:00