676 Commits

Author SHA1 Message Date
Leonardo Hernández Hernández bd59573f07 bump version to 0.7-rc1 2024-07-14 21:25:37 -06:00
Leonardo Hernández Hernández 0060e1922d prepare CHANGELOG.md for 0.7 2024-07-14 21:25:37 -06:00
Leonardo Hernández Hernández c709b09e10 changelog: add new 'unreleased' section 2024-07-14 21:13:20 -06:00
Guido Cella efe10ea655 use the parent scene node to determine if move clients out of LyrFloat
[sevz: commit message is mine]
2024-07-14 21:10:44 -06:00
Leonardo Hernández Hernández 9a962ce136 Reapply "place child clients above fullscreen clients"
This reverts commit 043ab3ac13.
2024-07-14 21:10:44 -06:00
Leonardo Hernández Hernández 0761fd0691 Merge branch 'wlroots-next' 2024-07-14 21:10:44 -06:00
Leonardo Hernández Hernández 12b44421c8 bump to linux-dmabuf version 5 2024-07-13 20:23:04 -06:00
Leonardo Hernández Hernández 5a4839b1c8 bump version to 0.6 2024-07-13 16:34:01 -06:00
Leonardo Hernández Hernández bd5001b780 prepare CHANGELOG.md for 0.6 2024-07-13 16:30:51 -06:00
Leonardo Hernández Hernández 043ab3ac13 Revert "place child clients above fullscreen clients"
This does not work as intended. Lets revert it temporarily and add it back
after the release.

This reverts commit 298949bbc4.
2024-07-12 21:08:48 -06:00
Rutherther aede3b294b Fix applybounds
Applybounds doesn't move client when it overlays
only with border with monitor to the right.

Apparently, c->geom.width already includes the border
as well.
2024-07-03 13:39:32 -06:00
Rutherther 7d8c3ea369 feat: focus empty monitor when clicked 2024-07-03 13:35:29 -06:00
Leonardo Hernández Hernández 2db0a2e8ef use round(3) and ceilf(3) from the math library
ΔSLOC: -1
2024-07-03 13:27:52 -06:00
Leonardo Hernández Hernández ab5c554d09 set preferred scale after the first commit (XDGshell) 2024-07-03 13:27:51 -06:00
Leonardo Hernández Hernández b4638fef29 drop useless maplayersurfacenotify() 2024-07-03 13:27:51 -06:00
Leonardo Hernández Hernández 71f11e6cf6 set O_NONBLOCK flag to stdout 2024-07-01 20:40:54 -06:00
Leonardo Hernández Hernández 2b4893a0ad add a note about having at least a dummy rule for rules[]
Closes: https://codeberg.org/dwl/dwl/issues/656
2024-06-29 20:41:54 -06:00
Leonardo Hernández Hernández 1002ea04fa add bugref about why we call updatemons in outputmgrapplyortest 2024-06-25 22:24:38 -06:00
Leonardo Hernández Hernández 5d73134e33 Merge remote-tracking branch 'upstream/main' into wlroots-next 2024-06-25 11:50:42 -06:00
Leonardo Hernández Hernández 46ae075430 set preferred scale on creation (LayerShell) 2024-06-25 11:33:49 -06:00
Leonardo Hernández Hernández 13925eb1da correctly report position to xwayland clients
Previously we didn't take into account their borders requiring us to add
`borderpx` to override_redirect clients.

Fixes: https://codeberg.org/dwl/dwl/issues/651
2024-06-24 13:32:03 -06:00
Leonardo Hernández Hernández 4a7d1bebf5 add bugref for negative x,y monitor position and xwayland 2024-06-22 00:21:17 -06:00
Leonardo Hernández Hernández baedf7f791 Merge remote-tracking branch 'upstream/main' into wlroots-next 2024-06-20 23:32:44 -06:00
Leonardo Hernández Hernández 845d3c47bd Reapply gamma LUT when re-enabling an output using wlr-output-power-management 2024-06-20 23:30:46 -06:00
Leonardo Hernández Hernández 9cdce1b8ff try to limit (79 characters) the line lenght in the Makefile 2024-06-20 23:29:26 -06:00
Leonardo Hernández Hernández 4cf1d604b8 Merge remote-tracking branch 'upstream/main' into wlroots-next 2024-06-20 22:44:50 -06:00
thanatos 650a918010 Updated power management handling to address issues raised in the PR 2024-06-20 19:11:53 -06:00
David Donahue 2902df94d6 Prevent updatemons() from removing monitors that have been put to sleep from the layout 2024-06-20 19:11:53 -06:00
Emil Miler 9b1f35e42b Implement support for output power management
This patch is based on the original stale patch by Guido Cella @guidocella.
It has been modified to apply cleanly to the latest v5.0 tag. Since the SLOC
limit is now lifted, this core feature should be merged into dwl upstream.

Thanks to Dima Krasner @dimkr for the cherry-pick.

Closes: #559, #525
2024-06-20 19:11:52 -06:00
Leonardo Hernández Hernández 92d1c286b8 default CC to gcc
posix c99 does not accept `-pedantic`

Fixes: https://codeberg.org/dwl/dwl/issues/584
2024-06-20 18:42:00 -06:00
Rutherther 784b047b38 Check for null monitor in resize function 2024-06-20 17:49:29 -06:00
Rutherther 11baacbec0 Add output to layout after enabled state is committed 2024-06-20 17:49:29 -06:00
Rutherther 16076ec5a4 fix: make sure selmon doesn't get set to disabled mon 2024-06-20 17:49:25 -06:00
Leonardo Hernández Hernández a8403d7b4d handle gpu resets
Fixes: https://codeberg.org/dwl/dwl/issues/601
2024-06-20 16:58:31 -06:00
Peter Hofmann 7a46fccdba Run startup_cmd in new session and kill the entire group
When a user's startup_cmd is a little more complex, e.g. a shell script,
and forks off several processes, then killing only the main child pid
might leave unwanted processes behind on exit. Not all children will
notice when their parent or the compositor has quit.

To fix this, put startup_cmd into its own session and process group, and
kill the entire group on exit.
2024-06-20 16:36:08 -06:00
Forrest Bushstone c2e7350f2e Make sure toplevel_from_wlr_surface is called with a valid surface pointer 2024-06-14 01:43:32 -06:00
Leonardo Hernández Hernández 7570dc0a41 minor adjustments in Makefile 2024-06-13 14:46:09 -06:00
Guido Cella e5a57fb155 use tabs in client.h
Fixes 298949bbc4.
2024-06-12 14:25:58 -06:00
Leonardo Hernández Hernández 57b5e41063 use enum headers when possible 2024-06-08 20:16:16 -06:00
Leonardo Hernández Hernández f4b6b429ec Merge remote-tracking branch 'upstream/main' into wlroots-next 2024-06-04 14:03:37 -06:00
Leonardo Hernández Hernández 21205f2f40 make sure clients share the same layer on floating layout 2024-06-04 13:58:16 -06:00
Leonardo Hernández Hernández 8f6fca35d0 create a keyboard group for each virtual keyboard 2024-06-02 23:33:57 -06:00
A Frederick Christensen bca077b927 Allow negative coordinates in MonitorRules
Monitor/output position (-1, -1) remains as a single indicator value for autoconfigure layout.
Additionally, one minor comment typo is corrected.
2024-06-02 18:54:11 -05:00
Forrest Bushstone 0047ff740a Replicate dwm behavior for sloppyfocus 2024-05-30 16:24:42 -06:00
Leonardo Hernández Hernández bf81a128ec wlroots now allows parallel installs 2024-05-27 23:10:40 -06:00
fauxmight 9825c26cdd dwl-patches overhaul - doc changes 2024-05-10 05:08:54 +00:00
A Frederick Christensen 34b7a57211 Update wmenu-run name 2024-05-05 13:52:25 -05:00
sewn 5c19e23146 switch to wmenu
bemenu is very bloated, turning itself into a library, which makes it
7489 SLOC.

wmenu on the other hand, looks suckless by default, and is only 2000
SLOC, which i also find alot nicer to use, since bemenu does nothing
to replicate the original dmenu feel.
2024-05-05 18:40:23 +00:00
Leonardo Hernández Hernández 3b1f0a8a88 add support for alpha-modifier-v1 (wlroots!4616)
References: https://gitlab.freedesktop.org/wlroots/wlroots/-/merge_requests/4616
2024-04-30 12:36:10 -06:00
Leonardo Hernández Hernández bb73481662 use wlr_renderer_get_texture_formats (wlroots!4644)
References: https://gitlab.freedesktop.org/wlroots/wlroots/-/merge_requests/4644
2024-04-21 15:53:59 -06:00
choc 577d8da6d1 put wlr_layer_shell top layer below fullscreen
fixes wlr_layer_shell top clients showing over fullscreen clients
2024-04-04 11:09:05 -06:00
Leonardo Hernández Hernández 72e2ce8b00 Merge remote-tracking branch 'upstream/main' into wlroots-next 2024-04-04 10:50:21 -06:00
Leonardo Hernández Hernández dd00d994ce do not set withdrawn state for xwayland clients
Closes: https://codeberg.org/dwl/dwl/issues/573
2024-03-31 21:41:12 -06:00
korei999 f7154d539d properly resize on configurex11 2024-03-31 21:39:21 -06:00
A Frederick Christensen 3a95d4ed03 Fix rule examples; minimize newbie surprises
Make example rules be actual EXAMPLES.
Now newcomers should not have to ask, "When I start firefox, nothing
happens. What is going on?"

Also clarified a minor typo and a consistency in spacing.
2024-03-26 20:00:46 -05:00
Guido Cella 2b171fd501 fix virtual pointers
When motionabsolute() is called from warpd, event->time_msec is 0, so
motionnotify() doesn't call wlr_cursor_move(). Fix this by explicitly
warping the cursor in this case, like it was done before implementing
pointer constraints.

I don't know if this is a bug in warpd or time_msec is always 0 with
virtual pointers, since the only other software that uses the virtual
pointer protocol I know of is wl-kbptr, and I can't get that to work
with dwl at all.
2024-03-11 19:01:13 +01:00
Forrest Bushstone ea33ce9ae6 Support pointer constraints and relative pointer protocols
Fixes: https://codeberg.org/dwl/dwl/issues/489
FIxes: https://codeberg.org/dwl/dwl/issues/317
2024-03-11 11:34:26 -06:00
Leonardo Hernández Hernández a0117eea76 use enums from the wayland protocol (wlroots!4575)
References: https://gitlab.freedesktop.org/wlroots/wlroots/-/merge_requests/4575
2024-02-29 14:05:09 -06:00
Leonardo Hernández Hernández 7b3eb70501 misc fixes to xdg-toplevel-decoration 2024-02-06 20:37:36 -06:00
Leonardo Hernández Hernández c215e8a3e1 send initial configure to xdg-toplevels (wlroots!4396)
We still need to fix xdg-popups

References: https://gitlab.freedesktop.org/wlroots/wlroots/-/merge_requests/4396
2024-02-06 20:30:40 -06:00
Leonardo Hernández Hernández 8e0b5baf8e Merge remote-tracking branch 'upstream/main' into wlroots-next 2024-02-07 02:27:07 +00:00
Guido Cella 8006e79200 allow toggling the layout before selecting a different one 2024-02-07 02:23:33 +00:00
Leonardo Hernández Hernández 5ae245beed fix minimum size
continuation of 4043fc3093
2024-02-07 02:21:26 +00:00
A Frederick Christensen 089480e0b6 Update and correct patches/patches-wiki links
Signed-off-by: Leonardo Hernández Hernández <leohdz172@proton.me>
2024-02-06 19:53:13 -06:00
Benjamin Chausse 3c98c4c24d Fix link to patches website
Signed-off-by: Benjamin Chausse <benjamin@chausse.xyz>
2024-02-06 00:39:01 +00:00
Guido Cella 298949bbc4 place child clients above fullscreen clients
When a child window of a fullscreen client is mapped, the fullscreen is
disabled, and if the previously fullscreen client is floating the child
window is rendered below it and cannot be seen, causing confusion,
though it is still focused and interactable.

Fix this by putting children of fullscreen clients in LyrFS instead of
LyrFloat, and by returning before the unset_fullscreen code is called
when they are mapped.

focusstack() now lets you switch focus from a fullscreen client to its
child windows, otherwise if you switch focus from the child window to
the fullscreen client you could not focus the child window again and the
fullscreen client would stay unresponsive.

Child clients are not reparented to LyrFloat after leaving fullscreen,
so you could spawn a child window, focus back the fullscreen client,
unfullscreen it, and the child window would still be drawn above other
floating clients. Avoid dealing with this edge case to keep the line
count low.

These cases can be tested by pressing Ctrl+o in applications with an
open file dialog.
2024-02-05 16:00:28 -06:00
Guido Cella 17c5cbbf7b make XWayland clients inherit tags and monitors
Revert 3213088 because the linked bug can no longer be reproduced with
wlroots 0.17, and update client_get_parent() so it doesn't segfault with
XWayland surfaces. This also allows reusing the p variable in the next
commit.
2024-02-05 15:59:46 -06:00
Guido Cella 45e3694fc8 remove useless wlr_scene_node_reparent() calls
These don't do anything because wlr_scene_node_reparent() is immediately
called again by setfloating() through setmon(). They are also a source
of confusion because if you change the wlr_scene_node_reparent() call in
applyrules() it takes a while to understand why it doesn't work.
2024-02-05 15:59:46 -06:00
Leonardo Hernández Hernández 5c936efc42 Revert "No need to call updatemons ourselves"
Fixes: https://codeberg.org/dwl/dwl/issues/577

This reverts commit 26d7c9689f.
2024-01-30 22:54:54 -06:00
A Frederick Christensen 9830a991ff Correct specifier-data_type mismatches 2024-01-26 23:12:35 -06:00
Guido Cella 863634a61c configure xwayland surfaces without monitors
For wine clients often configurex11() is called before mapnotify() and
therefore c->mon is NULL. configurex11 just returns early in that case,
letting these clients stay in the wrong size. For example only the top
left part of winecfg and wine uninstaller is drawn, or confirmation
dialogs like when closing wine notepad are too big. Fix this by
configuring their surfaces like before 88d386b.
2024-01-25 19:47:34 -06:00
Leonardo Hernández Hernández 5fec98b17a pass wl_event_loop to wlr_backend_autocreate (wlroots!4443)
References: https://gitlab.freedesktop.org/wlroots/wlroots/-/merge_requests/4443
2024-01-25 12:12:22 -06:00
Guido Cella ac6074f4fd implement the virtual pointer protocol
This is used by programs like warpd.
2024-01-25 17:13:01 +00:00
Leonardo Hernández Hernández 433385f7f1 do not arrange monitor if it's disabled (wlroots!4520)
This causes us to send negative values to xdg-configures (e.g a bug in our end)

References: https://gitlab.freedesktop.org/wlroots/wlroots/-/merge_requests/4520
(cherry picked from commit 4043fc3093)
2024-01-24 13:36:46 -06:00
Leonardo Hernández Hernández 4043fc3093 do not arrange monitor if it's disabled (wlroots!4520)
This causes us to send negative values to xdg-configures (e.g a bug in our end)

References: https://gitlab.freedesktop.org/wlroots/wlroots/-/merge_requests/4520
2024-01-24 12:12:09 -06:00
Leonardo Hernández Hernández b3f33e9147 add support for axis_relative_direction event (wlroots!4003)
References: https://gitlab.freedesktop.org/wlroots/wlroots/-/merge_requests/4003
2024-01-24 12:10:54 -06:00
Leonardo Hernández Hernández f136aa088a Revert "drop wl_drm (wlroots!4397)"
There still a lot software that uses this protocol

This reverts commit facbe57fcb.
2024-01-24 12:09:55 -06:00
Leonardo Hernández Hernández 1c3aaa70ba Merge remote-tracking branch 'upstream/main' into wlroots-next 2024-01-24 12:09:42 -06:00
Devin J. Pohly 26d7c9689f No need to call updatemons ourselves
The output manager in wlroots emits an output_layout.change event when
anything changes, so updatemons will be called anyway.

ΔSLOC: -1
2024-01-20 21:51:20 -06:00
Leonardo Hernández Hernández 6c8be38ec4 drop unused variable 2024-01-15 02:19:02 +00:00
Leonardo Hernández Hernández 417e37f988 request description before logs 2024-01-15 02:15:54 +00:00
Leonardo Hernández Hernández a1f3e25c35 turn on -Wfloat-conversion 2024-01-15 02:09:18 +00:00
Leonardo Hernández Hernández 0151bd48dd turn on -Wsign-compare 2024-01-15 02:09:18 +00:00
A Frederick Christensen 337d6ba3fb acknowledgements refactoring 2024-01-14 09:01:49 -06:00
Leonardo Hernández Hernández ec557f253b clarify the code will be kept as small as possible 2024-01-12 22:34:09 -06:00
choc fd263041a0 check if monitor is null before setting gamma
fixes segfault on monitor disconnect when using wlsunset
2024-01-11 17:17:57 +08:00
Leonardo Hernández Hernández a73afc66ab drop SLOC limit 2024-01-10 20:50:34 -06:00
Leonardo Hernández Hernández facbe57fcb drop wl_drm (wlroots!4397)
References: https://gitlab.freedesktop.org/wlroots/wlroots/-/merge_requests/4397
2024-01-10 18:13:31 -06:00
Leonardo Hernández Hernández f5b046ce9e prefer functionality over philosophy 2024-01-10 00:20:11 -06:00
Leonardo Hernández Hernández 6340989c8e add acknowledgment to djpohly 2024-01-10 00:17:06 -06:00
Ben Jargowsky 25e34e4d0c Destroy fullscreen node after moving clients off mon 2024-01-06 17:34:08 -08:00
Leonardo Hernández Hernández 668022bc90 don't send configure events to uninitialized xdg-toplevels 2024-01-05 11:12:34 -06:00
Leonardo Hernández Hernández c222468887 don't send configure events to uninitialized xdg-popups 2024-01-05 11:08:50 -06:00
Leonardo Hernández Hernández f3c4f72314 fix posible NULL-dereference in wl_surface.commit handler 2024-01-01 00:51:01 -06:00
Leonardo Hernández Hernández 05c263de45 only create wlr_presentation (wlroots!4482)
References: https://gitlab.freedesktop.org/wlroots/wlroots/-/merge_requests/4482
2023-12-27 11:45:36 -06:00
Leonardo Hernández Hernández bf35e77811 Merge remote-tracking branch 'upstream/main' into wlroots-next 2023-12-27 11:22:11 -06:00
Leonardo Hernández Hernández 6cbf8e9b80 unset DISPLAY before setting up xwayland 2023-12-27 11:19:03 -06:00
Leonardo Hernández Hernández d13015381b only execute the first keybinding 2023-12-27 11:18:24 -06:00
Leonardo Hernández Hernández e277d84c51 more style fixes
missed from the previous iteration
2023-12-27 11:17:52 -06:00
Leonardo Hernández Hernández bf5a6be73c Merge remote-tracking branch 'upstream/main' into wlroots-next 2023-12-26 16:21:28 -06:00
Leonardo Hernández Hernández 1f0afcfc28 create a wlr_keyboard_group for virtual keyboards
Fixes: https://codeberg.org/dwl/dwl/issues/554
2023-12-25 21:19:59 -06:00
Leonardo Hernández Hernández 23fd312409 fix typo
Fixes: 7afdc191fe
Thanks to: David Donahue <david.donahue2996@gmail.com>
2023-12-18 14:08:09 -06:00
Leonardo Hernández Hernández e39d931430 tie xdg_toplevel_decorations to Client
a xdg_toplevel can only have one xdg_toplevel_decoration so there is no need to
have a new struct for decorations
2023-12-18 12:59:47 -06:00
Leonardo Hernández Hernández 396840cdf2 Revert "nuke CSDs, hopefully for good!"
The compositor must respond to the client requesting a change to the decoration
mode, it does not matter if the compositor chooses a different mode.

This reverts commit 9071ce6c84.
2023-12-18 12:56:20 -06:00
Leonardo Hernández Hernández a71b368483 Revert "remove typedef Decoration"
This reverts commit d1ff1e6f75.
2023-12-18 12:56:19 -06:00
Leonardo Hernández Hernández 7afdc191fe style fixes 2023-12-17 21:42:50 +00:00
David Donahue 023efce6eb use wlr_keyboard_group to manage all keyboards 2023-12-17 21:41:39 +00:00
Leonardo Hernández Hernández fa660fb61e check toplevel resources
it's just a aesthetic change
2023-12-12 22:21:32 -06:00
Leonardo Hernández Hernández 126a333354 Merge remote-tracking branch 'upstream/main' into wlroots-next
Fixes: https://codeberg.org/dwl/dwl/issues/432
Fixes: https://codeberg.org/dwl/dwl/issues/547
2023-12-11 00:31:17 -06:00
Dima Krasner 9a84789ff1 restore and respect rootcolor 2023-12-11 00:30:17 -06:00
Leonardo Hernández Hernández 49bfe92703 merge X11Managed and X11Unmanaged into X11
now that client_is_unmanaged() checks the wlr struct we don't need to keep
track of it ourselves
2023-12-10 23:46:49 -06:00
Leonardo Hernández Hernández c88960751d check if a client is unmanaged checking the o-r flag
it may change at any moment and I don't really want to add a listener for it
2023-12-10 23:46:40 -06:00
Leonardo Hernández Hernández 9c5bdcfbe8 do not blindly try to send motion events when pointer button is pressed
we don't have to do this if the surface is the same
2023-12-10 23:27:59 -06:00
Leonardo Hernández Hernández 0de7d1aa71 Merge branch 'main' into wlroots-next 2023-12-07 22:43:13 -06:00
Leonardo Hernández Hernández 1884a07646 sort LISTEN calls in createnotify{,x11} 2023-12-07 22:40:59 -06:00
Leonardo Hernández Hernández 79c51a4584 use the same style for urgent() and sethints() 2023-12-07 22:37:35 -06:00
Leonardo Hernández Hernández f5d839844d remove an unneeded cast in createpointer() 2023-12-07 22:37:00 -06:00
Leonardo Hernández Hernández e03896b4d6 avoid duplication of lines
the output state is copied when creating a output configuration head
2023-12-07 22:18:49 -06:00
Leonardo Hernández Hernández e7e84b1083 add explanation about why we try to re-apply the gamma LUT on output changes 2023-12-07 22:17:48 -06:00
Leonardo Hernández Hernández 9694477b2f relax a bit the line length limit 2023-12-07 22:16:13 -06:00
Leonardo Hernández Hernández 6a15167754 add a blank line to improve readability 2023-12-07 22:15:42 -06:00
Leonardo Hernández Hernández e5e2d1c28f use (struct wlr_box){0} to empty the Monitor areas 2023-12-07 22:04:24 -06:00
Leonardo Hernández Hernández bdbfb45d66 copy layout symbol when matching a MonitorRule 2023-12-07 21:51:24 -06:00
Leonardo Hernández Hernández 50ea84c5f6 remove extra blank line 2023-12-07 21:49:26 -06:00
Leonardo Hernández Hernández 472a31b5a4 LayerSurface::link -> LayerSurface.link 2023-12-07 21:48:56 -06:00
Leonardo Hernández Hernández a760757b82 set the correct border color when mapping a client 2023-12-07 21:44:53 -06:00
Leonardo Hernández Hernández 80c9ad12ba reduce calls to client_get_geometry 2023-12-07 21:43:48 -06:00
Leonardo Hernández Hernández 7341d047da add a note about not removing the default rule
Closes: https://codeberg.org/dwl/dwl/issues/527
2023-12-07 14:20:49 -06:00
fictitiousexistence be2a1dea26 Update README.md 2023-12-07 14:19:42 -06:00
Leonardo Hernández Hernández 393078d80c store the layersurface pointer in l->popups->node.data as well 2023-12-07 14:19:09 -06:00
Leonardo Hernández Hernández 28ec843aee make sure popups of a layer surface are in the correct layer
previously it worked because we checked in every commit the layer
in a353eee2ca and
b100b446b8
we changed the way it's handled and now if the layer surface does not change
the layer we don't it either. meaning that if it was created in the bottom
layer and did not change the layer the popups would show behind xdg clients
2023-12-07 14:19:02 -06:00
Leonardo Hernández Hernández 2b3504e439 sort #includes 2023-12-01 21:35:50 -06:00
Leonardo Hernández Hernández bab5c0185a Merge remote-tracking branch 'upstream/main' into wlroots-next 2023-11-30 22:44:52 -06:00
Leonardo Hernández Hernández 5f7d396996 don't return early if the first output commit fails 2023-11-30 22:39:03 -06:00
Leonardo Hernández Hernández 901d2e2d9d check failure of wlr_output_init_render 2023-11-30 22:38:52 -06:00
Leonardo Hernández Hernández 00e867d536 use detached output state in createmon()
see previous commit for motivation
2023-11-30 22:38:39 -06:00
Leonardo Hernández Hernández 2e29189b92 use a detached output state in outputmgrapplyortest()
wlr_output.pending might be removed in wlroots 0.18
2023-11-30 22:38:11 -06:00
Leonardo Hernández Hernández 43f31b8f1b improve the bug report template
Fixes: https://codeberg.org/dwl/dwl/issues/498
2023-11-28 23:03:35 -06:00
Leonardo Hernández Hernández ff39cac355 convert issue templates to yaml
also move the templates to .gitea to reflect the migration to Codeberg
2023-11-28 21:28:51 -06:00
Leonardo Hernández Hernández 70c5fcc23d chase xdg-shell events update (wlroots!4345)
References: https://gitlab.freedesktop.org/wlroots/wlroots/-/merge_requests/4345
2023-11-27 00:06:03 -06:00
Leonardo Hernández Hernández 3fe3581a59 chase wlr_layer_shell_v1.new_surface changes (wlroots!4265)
References: https://gitlab.freedesktop.org/wlroots/wlroots/-/merge_requests/4265
2023-11-27 00:06:03 -06:00
Leonardo Hernández Hernández 057d50af8c pass wl_display to wlr_output_layout_create (wlroots!4310)
References: https://gitlab.freedesktop.org/wlroots/wlroots/-/merge_requests/4310
2023-11-27 00:06:03 -06:00
Leonardo Hernández Hernández 2e4fdc1664 use l instead of layersurface
`layer_surface` instead of `wlr_layer_surface`
and `scene_layer` whenever a wlr_scene_tree is related to layer surfaces
2023-11-25 19:18:19 -06:00
Leonardo Hernández Hernández b100b446b8 return early if a layersurface didn't commit something 2023-11-25 19:17:32 -06:00
Leonardo Hernández Hernández 9cb1ece6cc do not check if a layer surface has monitor on commit
We do not allow creating them w/o monitor and they are destroyed when
destroying their monitor
2023-11-25 19:17:32 -06:00
Leonardo Hernández Hernández 01a237bd5c send wl_surface.enter before initial commit
It's not necessary but it'll help clients to render a perfect first frame
2023-11-25 19:17:32 -06:00
Leonardo Hernández Hernández a5e068b20a destroy the layer-suface's scene tree for popups 2023-11-25 19:16:33 -06:00
Leonardo Hernández Hernández 39f4ee564b use wlr_box_equal() instead of memcmp 2023-11-25 19:08:56 -06:00
Leonardo Hernández Hernández a353eee2ca simplify settings popups scene tree parent 2023-11-25 19:06:17 -06:00
Leonardo Hernández Hernández 66ec028b00 simplify check for wlr_layer_surface.output 2023-11-25 19:05:27 -06:00
Leonardo Hernández Hernández 1f10e69b4c use sizeof(*pointer) instead of sizeof(struct) 2023-11-25 19:04:57 -06:00
Leonardo Hernández Hernández 922e117fc5 add new 'unreleased' section 2023-11-25 19:04:08 -06:00
Leonardo Hernández Hernández 2783e82bf8 make sure to unlink Monitor.request_state listener 2023-11-25 18:53:18 -06:00
Squibid 66ef4ecfec Change github links to codeberg links in README.md 2023-11-25 10:54:56 -06:00
Leonardo Hernández Hernández d08e6a3a7e include CHANGELOG.md in the tarball
Fixes: 24576f1fdf
2023-11-25 01:22:48 -06:00
Leonardo Hernández Hernández f579dd8668 bump version to 0.5 2023-11-25 00:28:11 -06:00
Leonardo Hernández Hernández 24576f1fdf add CHANGELOG.md 2023-11-25 00:21:53 -06:00
Leonardo Hernández Hernández 7ac76219df Merge branch 'wlroots-next' 2023-11-25 00:04:19 -06:00
Leonardo Hernández Hernández 6838f909bd try to apply gamma LUT in updatemons
this in the case the output was re-enabled
2023-11-21 20:41:36 -06:00
Leonardo Hernández Hernández d2dd2f4986 ignore wl_surface.commit for xwayland clients
This is no longer needed
2023-11-21 20:16:26 -06:00
Leonardo Hernández Hernández a0e79d8145 Do not send repeated xdg_toplevel.configure_bounds
Fixes: 32e66f4582
2023-11-21 20:15:46 -06:00
Leonardo Hernández Hernández 32e66f4582 resize clients on commit
Fixes: https://github.com/djpohly/dwl/issues/515
This reverts commit 4567979b16.
2023-11-21 20:15:00 -06:00
link2xt b4da97446a createkeyboard: do not segfault if xkb_keymap_new_from_names returns NULL
Passing NULL to wlr_keyboard_set_keymap results in a segfault.
Example:

  Thread 1 "dwl" received signal SIGSEGV, Segmentation fault.
  0x00007ffff7e49b64 in xkb_keymap_ref () from /usr/lib/libxkbcommon.so.0
  (gdb) bt
  #0  0x00007ffff7e49b64 in xkb_keymap_ref () at /usr/lib/libxkbcommon.so.0
  #1  0x00007ffff7f06389 in wlr_keyboard_set_keymap () at /usr/lib/libwlroots.so.11
  #2  0x000055555555bc54 in createkeyboard ()
  #3  0x000055555555c283 in inputdevice ()
  #4  0x00007ffff7e8101e in wl_signal_emit_mutable () at /usr/lib/libwayland-server.so.0
  #5  0x00007ffff7e8101e in wl_signal_emit_mutable () at /usr/lib/libwayland-server.so.0
  #6  0x00007ffff7edb52c in  () at /usr/lib/libwlroots.so.11
  #7  0x00007ffff7ee44b6 in  () at /usr/lib/libwlroots.so.11
  #8  0x000055555555fe66 in main ()
2023-11-19 01:14:35 -06:00
Leonardo Hernández Hernández 2751a6195d do not try to enable adaptive sync 2023-11-18 11:20:56 -06:00
Leonardo Hernández Hernández fcf324be6c fix the position of the cursor image after turning all the monitors on 2023-11-17 19:03:23 -06:00
Leonardo Hernández Hernández b8e933b9a9 remove unused #include 2023-11-17 11:03:33 -06:00
Leonardo Hernández Hernández 1044a21555 do not check if session is non-NULL
wlr_session_change_vt() is a no-op if session == NULL
2023-11-17 11:03:33 -06:00
Leonardo Hernández Hernández 6bcd5d8d87 do not explicitly destroy some wlroots interfaces
they are destroyed when the wayland display is destroyed
2023-11-17 11:03:32 -06:00
Leonardo Hernández Hernández 7611dc91d7 enable debug symbols by default
they does not affect performance and the size's increase is negligible
2023-11-17 11:03:32 -06:00
Leonardo Hernández Hernández e95f14541a fix docs
copied from tinywl
2023-11-17 11:03:32 -06:00
Leonardo Hernández Hernández bca1b779aa fix destroynotify() docs
References: https://gitlab.freedesktop.org/wlroots/wlroots/-/merge_requests/4421
2023-11-17 11:03:32 -06:00
Leonardo Hernández Hernández 7bdbab0400 check toplevel resource instead of client's xdg_shell to set bounds 2023-11-17 11:03:32 -06:00
Leonardo Hernández Hernández dd25cdb56e use the new wlroots function to get a toplevel from a wlr_surface
References: https://gitlab.freedesktop.org/wlroots/wlroots/-/merge_requests/4419
2023-11-17 11:03:32 -06:00
Leonardo Hernández Hernández caac2d664d explicitly return -1 in the first check in toplevel_from_wlr_surface 2023-11-17 11:03:31 -06:00
Leonardo Hernández Hernández b1740056d5 do not use #ifdef -> #else -> #endif in client_is_x11
all other funcions use #ifdef -> #endif
2023-11-17 11:03:31 -06:00
Leonardo Hernández Hernández 0067c76cab delete unused functions 2023-11-17 11:03:31 -06:00
Leonardo Hernández Hernández 22d21676b0 style fixes in client_is_float_type 2023-11-17 11:03:31 -06:00
Leonardo Hernández Hernández d6c102d9db correctly check if the scene node is enabled in client_is_rendered_on_mon 2023-11-17 11:03:31 -06:00
Leonardo Hernández Hernández 0e897608a1 do not use magical numbers to check edges
the interface is declared stable, which means we could just use 0 anyway
2023-11-17 11:03:31 -06:00
Leonardo Hernández Hernández 6d0ec595d3 simplify client_get_clip
the clips for xwayland and xdg clients are pretty similar, after all we only
need to adjust x and y for xdg clients
2023-11-17 11:03:31 -06:00
Leonardo Hernández Hernández 4f4c540bb9 prevent a use-after-free at exit 2023-11-17 11:03:30 -06:00
Leonardo Hernández Hernández 8e3f5364d3 do not compute layout box twice 2023-11-17 11:03:30 -06:00
Leonardo Hernández Hernández 2212363225 make sure fullscreen clients have the right size 2023-11-17 11:03:30 -06:00
Leonardo Hernández Hernández 6f8a3f9374 fix screen artifacts when setting gamma
the artifacts were caused because we tried to set the gamma right after
receiving the event, this resulted in two pending page-flips, which
not always play well together.

This also seems to fix a screen freeze when turning on a monitor that has
gamma.

Additionally the current method won't work once [0] is merged

[0]: https://gitlab.freedesktop.org/wlroots/wlroots/-/merge_requests/4423
2023-11-17 11:01:30 -06:00
Leonardo Hernández Hernández e1f3983bf8 use wlr_scene_subsurface_tree_set_clip
References: https://gitlab.freedesktop.org/wlroots/wlroots/-/merge_requests/4131
Closes: https://github.com/djpohly/dwl/issues/411
2023-11-14 19:44:43 -06:00
Leonardo Hernández Hernández 31bf1cbaf6 Revert "respect size hints"
This reverts commit 72e0a560d9.
2023-11-14 19:44:28 -06:00
Leonardo Hernández Hernández d6fabe3a15 add a comment about chvt keybindings
Closes: https://github.com/djpohly/dwl/issues/427
2023-11-01 12:44:16 -06:00
Leonardo Hernández Hernández a4a83e95e6 use newer cursor naming spec
References: https://www.freedesktop.org/wiki/Specifications/cursor-spec/
References: https://gitlab.freedesktop.org/wlroots/wlroots/-/merge_requests/4416
2023-11-01 12:28:19 -06:00
Leonardo Hernández Hernández e45ded7eea ignore maximize events for clients using xdg-shell v5 and newer 2023-11-01 12:16:02 -06:00
Leonardo Hernández Hernández e5e74acfce send maximized if tiled isn't supported (XDG shell)
wlroots doesn't do it automatically anymore

References: https://gitlab.freedesktop.org/wlroots/wlroots/-/merge_requests/4409
2023-11-01 12:04:59 -06:00
Leonardo Hernández Hernández 892a4d3ec7 Merge remote-tracking branch 'upstream/main' into wlroots-next 2023-10-13 17:10:25 -06:00
Leonardo Hernández Hernández ab87410023 clarify the dependencies needed by dwl
Note that previous df131cdb78 libX11 headers
were also required for building (but not for runtime)

Also, I want to apologize to the packagers for do not list *all* the required
dependencies before.
2023-10-11 20:08:44 -06:00
Leonardo Hernández Hernández 7085057f6d update README.md
these things were changed in the code but not in the readme
2023-10-11 19:59:58 -06:00
Ben Collerson 8c79f8dc15 check client is mapped before setting border color
For some reason brave configured for as a wayland client triggers this code on startup and segfaults.

Checking if the client is mapped fixes this, like with the previous fix for urgent border colour.

References: 887fde65a3
Fixes: 72a7d78a1a
2023-10-10 10:16:11 -06:00
Leonardo Hernández Hernández 8781f4dbf5 Merge remote-tracking branch 'upstream/main' into wlroots-next 2023-10-09 22:37:36 -06:00
Leonardo Hernández Hernández df131cdb78 use <xcb/xcb.h> instead of <X11/Xlib.h> 2023-10-09 22:33:37 -06:00
Leonardo Hernández Hernández 887fde65a3 only set border color for urgent *and* mapped X11 clients
this fixes a segfault when the client emits .set_hints but it's not mapped

Fixes: 72a7d78a1a
2023-10-09 22:32:15 -06:00
Leonardo Hernández Hernández b299e01e44 Merge remote-tracking branch 'upstream/main' into wlroots-next 2023-10-09 11:45:51 -06:00
Leonardo Hernández Hernández 6d9a915fb6 Revert "just add define"
I'm going to make some changes in the config file anyway

This reverts commit e5367753bb.
2023-10-09 11:12:24 -06:00
Leonardo Hernández Hernández 935b852dc5 add [-d] flag to enable debug logging 2023-10-09 11:11:33 -06:00
Leonardo Hernández Hernández a18c528300 simplify setting the border color of clients 2023-10-09 11:05:41 -06:00
Leonardo Hernández Hernández 72a7d78a1a make the borders red borders for urgent clients
iirc this is the same behavior of dwm
2023-10-09 11:04:03 -06:00
Leonardo Hernández Hernández d63f4078c5 use the same border colors as dwm 2023-10-09 11:03:06 -06:00
Leonardo Hernández Hernández f4031590cd add missing url about the COLOR macro 2023-10-05 22:06:30 -06:00
Leonardo Hernández Hernández 0ab1ed6530 add macro to configure colors
Closes: https://github.com/djpohly/dwl/issues/466
2023-10-05 22:03:59 -06:00
Forrest Bushstone f695674361 Check if c is fullscreen before reparenting it to LyrFloating
Closes: https://github.com/djpohly/dwl/issues/487
2023-09-29 18:01:31 -06:00
Forrest Bushstone aec21eca1f make sure that fullscreen clients are on the correct screen when isfloating is true
Bug: https://github.com/djpohly/dwl/issues/487
2023-09-29 18:00:32 -06:00
Leonardo Hernández Hernández 342850487a include dwl.desktop in the tarbal 2023-09-24 14:43:30 -06:00
Leonardo Hernández Hernández 1333f8cc6e Merge remote-tracking branch 'upstream/main' into wlroots-next 2023-09-24 11:44:29 -06:00
Leonardo Hernández Hernández 5baf195523 allow specify DATADIR (to install desktop file) 2023-09-24 11:24:39 -06:00
Weiseguy 773bd04764 Add desktop entry file 2023-09-22 19:49:18 -06:00
Angelo Antony 755fcae2af fix typo 2023-09-10 10:42:33 -06:00
Leonardo Hernández Hernández 960c32a7d8 call setfloating in setmon
since in the previous commit we may not applying floating in clients
this is to make sure we do
2023-09-06 22:23:37 -06:00
Leonardo Hernández Hernández aea8dd6ae1 return early if the client doesn't have monitor in setfloating
there is still a bug, but for now this prevents a segfault

Bug: https://github.com/djpohly/dwl/issues/472
2023-09-06 22:22:21 -06:00
Leonardo Hernández Hernández c1d8b77f7f prefer IRC over Discord
I regularly check the discord server, but it is much more likely that I will be
online on IRC, and djpohly does not seem to be active on either.
2023-08-23 00:32:15 -06:00
Ben Collerson e5367753bb just add define 2023-08-22 22:20:39 -06:00
Ben Collerson 9be85c1117 tagcount should have been a #define 2023-08-22 22:20:39 -06:00
Leonardo Hernández Hernández 4b8c1bf31e return nothing in xytonode()
we do not use the node
2023-08-22 14:48:29 -06:00
Devin J. Pohly d7569870b6 Style: use early-return to clarify code
Use an early return to avoid indenting the main logic instead of
wrapping the tail of a function in an if statement.

No functional change, except for a handful of places where printstatus()
was being called spuriously (tag, toggletag, toggleview).

ΔSLOC: 0
2023-08-22 01:44:31 -06:00
Devin J. Pohly 4eb54b55f3 No need to send surface.leave/enter events
The scene graph implementation sends these for us, and it does so more
accurately than our overly-simplified approach.  Layer shell surfaces
don't appear to receive these events at all, according to my
WAYLAND_DEBUG experiments with bemenu and dtao.

ΔSLOC: -4
2023-08-22 01:44:31 -06:00
Leonardo Hernández Hernández d4f2c6bfd6 chase wlroots!4288
References: https://gitlab.freedesktop.org/wlroots/wlroots/-/merge_requests/4288
2023-08-21 17:53:24 -06:00
Leonardo Hernández Hernández 4567979b16 don't resize clients on commit
It creates an infinite commit-resize loop when scale != 1
2023-08-18 21:37:22 -06:00
Leonardo Hernández Hernández 25db045392 set withdrawn state for xwayland invisible clients 2023-07-31 18:19:41 -06:00
Leonardo Hernández Hernández 78cf88670f add support for xdg-shell v6 2023-07-31 18:19:41 -06:00
Leonardo Hernández Hernández ce997c4a21 update to xdg-shell v5 2023-07-23 21:15:06 -06:00
Leonardo Hernández Hernández 0e5405610e add support for cursor-shape-v1
References: https://gitlab.freedesktop.org/wlroots/wlroots/-/merge_requests/4106
2023-07-23 19:56:55 -06:00
Leonardo Hernández Hernández 0bb1a1cc5c increase wl_compositor version
Now scene will handle sending the preferred buffer scale

References: https://gitlab.freedesktop.org/wlroots/wlroots/-/merge_requests/4269
2023-07-15 10:11:47 -06:00
Leonardo Hernández Hernández aecff8cb26 Merge branch 'main' into wlroots-next 2023-07-13 22:36:48 -06:00
Leonardo Hernández Hernández ca4a97b933 do not use wl_event_loop for signal handling
ΔSLOC: -4

Fixes: https://github.com/djpohly/dwl/issues/456
Fixes: https://github.com/djpohly/dwl/issues/459
2023-07-13 22:32:48 -06:00
Devin J. Pohly 76ba2cdab0 Remove now-unneeded call to motionnotify
This appears to have been here for the side effect of updating the drag
icon's position.
2023-07-13 22:17:03 -06:00
Devin J. Pohly 4b15bbeb33 Remove unused icon variable 2023-07-13 22:17:03 -06:00
Devin J. Pohly 831fc36bc9 Make drag_icon a persistent scene node
If there is no current drag icon, this node will be empty, but we now
have `drag_icon != NULL` as an invariant.  This allows us to eliminate a
conditional, since there's no harm in moving an empty node's coordinates
around with the pointer.

ΔSLOC: -1
2023-07-13 22:17:03 -06:00
Devin J. Pohly 1841527871 properly destroy scene
ΔSLOC: +1
2023-07-13 17:44:21 -06:00
Leonardo Hernández Hernández ff7c0e9508 chase wlroots!4220
References: https://gitlab.freedesktop.org/wlroots/wlroots/-/merge_requests/4220
2023-07-10 11:23:19 -06:00
Devin J. Pohly 33bcd2e4ca Line saver: LISTEN_STATIC macro
This parallels the LISTEN macro for statically allocated listeners, and
it allows us to remove almost all of the global wl_listener
declarations.

This also fixes a bug with the axisnotify listener, which was declared
with a compound literal.  At block scope, these have automatic storage
duration [1], so the listener was no longer valid after setup()
returned.  (The option to declare it static explicitly was standardized
in C23, if that ever gains suckless traction.)

ΔSLOC: -27

[1]: https://en.cppreference.com/w/c/language/compound_literal#Explanation
2023-07-08 16:56:09 -06:00
Devin J. Pohly fbd84aca4a Unify signal handling under wl_event_loop
Merge our signal handlers into a single function and let Wayland deal
with all the struct sigaction stuff.

ΔSLOC: -3
2023-07-03 22:28:27 -06:00
Devin J. Pohly a01e402c5d Line saver: follow "local = wlr->data = obj" pattern
There were still a couple of places where we could use this handy
multiple assignment to save a line.

ΔSLOC = -3
2023-07-03 21:21:43 -06:00
Leonardo Hernández Hernández 9dd3f230c0 Merge remote-tracking branch 'upstream/main' into wlroots-next 2023-06-29 13:11:55 -06:00
Devin J. Pohly eda0613cc4 Separate drag icon from layers array and Lyr enum
If we treat the drag icon as distinct from other layers (it doesn't have
contents that are interactive, focusable, etc.), then we can iterate
over layers meaningfully with a simple for loop.

ΔSLOC: -8
2023-06-25 17:44:00 -05:00
Leonardo Hernández Hernández 733114f0ca schedule a frame after commmiting gamma
not doing it, may freeze the output or do not actually change the gamma until
creating a client
2023-06-24 10:09:49 -06:00
Leonardo Hernández Hernández fdb66ccfa3 use detached output states to set gamma 2023-06-23 13:42:44 -06:00
Leonardo Hernández Hernández 6095ff84d2 Revert "use wlr_scene_output_build_state() to set gamma"
This reverts commit 65f68e7643.
2023-06-23 13:30:43 -06:00
Devin J. Pohly 68a17f962e Don't bother with ignoring SIGCHLD
It added complexity, especially with the differences in behavior between
handled and ignored signals across an exec().
2023-06-16 00:24:17 -06:00
Devin J. Pohly 9c592da01f Reset ignored signal handler in spawn() as well 2023-06-16 00:24:17 -06:00
Devin J. Pohly df11b7a786 fix startup_cmd SIGCHLD handler
Ignored handlers are not reset by exec() calls
2023-06-16 00:24:17 -06:00
Leonardo Hernández Hernández 1e1811f953 drop KDE idle support
use ext-idle-notify-v1 instead
2023-06-15 12:32:31 -06:00
Leonardo Hernández Hernández dfb6b97159 drop support for wlr-input-inhibitor-unstable-v1
deprecated in favor of ext-session-lock-v1

References: https://gitlab.freedesktop.org/wlroots/wlr-protocols/-/commit/4aa366e3ddf5e9b67950a94b9fb299bbfe05eef8
References: https://gitlab.freedesktop.org/wlroots/wlroots/-/merge_requests/3848
2023-06-15 12:27:34 -06:00
Leonardo Hernández Hernández 65f68e7643 use wlr_scene_output_build_state() to set gamma 2023-06-15 12:22:43 -06:00
Leonardo Hernández Hernández 96ab92cdb1 use wlr_cursor_set_xcursor()
This avoids re-upload the cursor image in each motion event

Managing the scale is done by the function itself

References: https://gitlab.freedesktop.org/wlroots/wlroots/-/merge_requests/4170
2023-06-15 12:12:22 -06:00
Leonardo Hernández Hernández 1eb8a82ac4 Revert "avoid setting duplicate cursor image"
This reverts commit b5776e5180.

See next commit for details
2023-06-15 12:02:30 -06:00
Leonardo Hernández Hernández 24a337e6ec handle gamma-control-v1 set_gamma event
References: https://gitlab.freedesktop.org/wlroots/wlroots/-/merge_requests/4046
2023-06-08 23:35:46 -06:00
A Frederick Christensen 5215712cab Stray whitespace fixes 2023-06-07 17:47:36 -06:00
Leonardo Hernández Hernández f3d017077a use the new {a,di}ssociate events to handle xwayland commit listener 2023-06-02 22:08:17 -06:00
Leonardo Hernández Hernández 06bc65549f chase wlroots map logic unification
Signed-off-by: Leonardo Hernández Hernández <leohdz172@proton.me>
2023-06-02 22:03:41 -06:00
Leonardo Hernández Hernández a8ccbe63f3 Merge branch 'main' into wlroots-next 2023-06-02 22:01:39 -06:00
Leonardo Hernández Hernández 9b9b79b35e activate lock surface in updatemons
Fixes an issue when swaylock does not receive input after turn off and then
turn on the outputs
2023-06-02 21:56:09 -06:00
Leonardo Hernández Hernández 3d98907b98 send frame done even if output commit fails
Bug: https://github.com/djpohly/dwl/issues/420
Fixes: https://github.com/djpohly/dwl/issues/353
2023-06-02 21:51:47 -06:00
Nikita Ivanov f8884ffc2b Set XCURSOR_SIZE 2023-06-01 19:11:33 -06:00
Leonardo Hernández Hernández a5e45924ed remove note about contact me for patch issues
I am no longer able to spend much time developing dwl let alone maintaining
other's patches :)
2023-05-28 00:20:20 -06:00
Leonardo Hernández Hernández 72adab621f destroy old client popups when focusing another client
Closes: https://github.com/djpohly/dwl/issues/408
2023-05-27 23:29:05 -06:00
Micah Gorrell 0729f18dce Prevent using a wlr_layer_surface after destroying it, due to no available outputs 2023-05-25 21:21:56 -06:00
Leonardo Hernández Hernández 2d1a40caf2 pass version to wlr_compositor_create()
References: https://gitlab.freedesktop.org/wlroots/wlroots/-/merge_requests/3696
Signed-off-by: Leonardo Hernández Hernández <leohdz172@proton.me>
2023-04-14 12:25:05 -06:00
Leonardo Hernández Hernández 733754bb06 Merge remote-tracking branch 'upstream/main' into wlroots-next 2023-04-14 12:24:19 -06:00
Leonardo Hernández Hernández 797e0c74b2 correctly check if a scene node is enabled
checking only wlr_scene_node.enabled may result in a false positive because it
does not consider if its ancestors are enabled as well.
2023-04-13 13:12:27 -06:00
Leonardo Hernández Hernández 3c760bcd4a remove unneeded check of m in arrange()
arrange must never be called with a NULL argument
2023-04-13 13:12:27 -06:00
Ben Collerson da77e34ee5 Use uint32_t for ui Arg 2023-04-09 17:09:35 -06:00
Leonardo Hernández Hernández 20f61a59af use fixed-size type for client tags
while the size of `int` in most compilers is 32-bits, the size of int and all
other integer types are implementation defined, so make sure we can use up to
32-bits
2023-04-08 11:29:18 -06:00
Ben Collerson 9d68554c59 remove tag labels from dwl
Tag labels are not used in dwl. Only the number of tags is important.
Tag labels should be defined for each tag in whatever status bar is
used.
2023-04-08 11:27:49 -06:00
Yves Zoundi bbdf2a913b display clients count in monocle symbol
- Replicate missing functionality from dwl to display the client count in monocle mode
  - Add ltsymbol field to Monitor struct
  - Display client count in monocle mode when greater than zero
- Tested with somebar and dwlb
2023-03-16 00:02:14 -06:00
Palanix 21930621ee Remove rootcolor 2023-03-13 09:40:40 -06:00
A Frederick Christensen 6722a89532 Missing apostrophe 2023-03-07 22:17:05 -06:00
Leonardo Hernández Hernández eaf6dd2cd2 do not call dmabuf_create twice
it is called automatically by `wlr_renderer_init_wl_display()` but since we
need a pointer to wlr_linux_dmabuf_v1 to integrate it with scene API we need
to recreate that function.

Bug: https://github.com/emersion/xdg-desktop-portal-wlr/issues/216
Fixes: https://github.com/djpohly/dwl/issues/398
2023-03-07 22:04:32 -06:00
gan-of-culture e4921fad28 add missing comma in "MonitorRule"
add a missing comma for the example
2023-02-25 15:59:23 -06:00
Leonardo Hernández Hernández d1b36925c9 add support for linux-dmabuf-unstable-v1
References: https://gitlab.freedesktop.org/wlroots/wlroots/-/merge_requests/3726
References: https://gitlab.freedesktop.org/wayland/wayland-protocols/-/blob/main/unstable/linux-dmabuf/linux-dmabuf-unstable-v1.xml
2023-02-20 21:24:18 -06:00
godalming123 c69a2bec3f Fix spacing and replace it with tabs 2023-02-18 18:47:44 -06:00
godalming123 737688a6b1 fix spelling 2023-02-18 18:47:44 -06:00
Leonardo Hernández Hernández fefcdbed4a Merge remote-tracking branch 'upstream/main' into wlroots-next 2023-02-13 13:46:41 -06:00
pino-desktop f8373ccf25 Fixed 'unused variable' compiler warning. 2023-02-13 13:43:28 -06:00
Ben Collerson 7f9a212476 Add appid field to printstatus() output
Adds an appid field to printstatus which can be used to monitor the
currently active application.
2023-02-13 13:30:27 -06:00
Leonardo Hernández Hernández ab8334bd8a implement repeatable keybindings 2023-02-13 13:18:43 -06:00
Leonardo Hernández Hernández 23ede80f74 allow configure x and y of outputs 2023-02-13 13:14:29 -06:00
Leonardo Hernández Hernández 04fdf1a295 add support for wp-fractional-scale-v1
References: https://gitlab.freedesktop.org/wlroots/wlroots/-/merge_requests/3511
2023-02-08 22:25:41 -06:00
Leonardo Hernández Hernández fbe89a929f chase wlroots!4000
References: https://gitlab.freedesktop.org/wlroots/wlroots/-/merge_requests/4000
2023-02-05 10:03:09 -06:00
Leonardo Hernández Hernández e7f736ccc9 chase wlroots!3391
References: https://gitlab.freedesktop.org/wlroots/wlroots/-/merge_requests/3991
2023-02-02 10:30:24 -06:00
Job79 7ae5039b4f follow upstream xwayland_surface changes
wlroots removed the `wlr_surface_is_xwayland_surface` function, and renamed `wlr_xwayland_surface_from_wlr_surface` to `wlr_xwayland_surface_try_from_wlr_surface`.

related commit: https://gitlab.freedesktop.org/wlroots/wlroots/-/commit/fbf5982e3838ee28b5345e98832f6956c402b225
2023-02-01 14:16:54 -06:00
Leonardo Hernández Hernández f7d6a34cd9 use sigaction(2) for signal handling
References: http://git.suckless.org/dwm/commit/712d6639ff8e863560328131bbb92b248dc9cde7.html
2023-01-30 23:26:32 -06:00
Leonardo Hernández Hernández cf9c5745e5 Merge remote-tracking branch 'upstream/main' into wlroots-next 2022-12-30 15:29:12 -06:00
Leonardo Hernández Hernández 8653b27692 bump version to 0.4 2022-12-30 14:46:52 -06:00
Leonardo Hernández Hernández 932c1d45f2 remove --long from git-describe command 2022-12-30 14:46:34 -06:00
Leonardo Hernández Hernández dbe44e48c8 return early if selmon is not part of the output layout in dirtomon()
instead of checking twice
2022-12-30 14:31:56 -06:00
Leonardo Hernández Hernández 0b2c33248c simplify check in urgent()
we only care if it returned a client or not
2022-12-30 14:29:19 -06:00
Leonardo Hernández Hernández 56114f700f arrange monitor after updating fullscreen background and lock surfaces 2022-12-30 14:26:53 -06:00
Leonardo Hernández Hernández 71c7e4e1e5 also update locked_bg node position in updatemons() 2022-12-30 14:25:19 -06:00
Leonardo Hernández Hernández 72d29f1654 add blank lines to make updatemons() more readable 2022-12-30 14:21:46 -06:00
Leonardo Hernández Hernández e523c2b82b update comment about client_set_size() as no-op 2022-12-30 14:19:47 -06:00
Leonardo Hernández Hernández 6d0e3a5198 check if a client is resizing before checking if it's visible
It's not like it's noticeable, but theoretically this is faster
2022-12-30 14:15:21 -06:00
Leonardo Hernández Hernández 5347ed663d only mark pending resizes as completed checking the configure serial 2022-12-30 14:14:06 -06:00
Leonardo Hernández Hernández b39d270b9f Merge branch 'main' into wlroots-next 2022-12-24 18:04:41 -06:00
Leonardo Hernández Hernández 05f4e23c43 bump version to 0.4-rc3 2022-12-24 17:54:19 -06:00
Leonardo Hernández Hernández be854cab35 do not try to resize if size wouldn't change 2022-12-24 16:44:09 -06:00
Leonardo Hernández Hernández 6ca011430a do not skip frames if a client is stopped and have a pending resize 2022-12-24 16:44:09 -06:00
Leonardo Hernández Hernández 7eaa01ac1f Revert "Revert "fix flickering when resizing/spawning windows""
This reverts commit 4a32293548.
2022-12-24 16:44:09 -06:00
Leonardo Hernández Hernández 92e7752203 disable client's scene node after create it (only XDGShell)
will be enabled when setting up its monitor and arrange it

Bug: https://github.com/djpohly/dwl/issues/306
2022-12-24 16:44:09 -06:00
Leonardo Hernández Hernández 6682878009 call arrange() or resize() depending on c->isfloating in commitnotify 2022-12-24 16:43:31 -06:00
Leonardo Hernández Hernández afacc9b0b5 force SSD when creating an xdg_toplevel_decoration object
Closes: https://github.com/djpohly/dwl/issues/366
Not sure why GLFW apps do not get mapped when we do not tell them the
decoration method
2022-12-20 21:53:45 -06:00
Leonardo Hernández Hernández dd9d8d543c remove selclient()
selclient() does not work well when dealing newly mapped
clients (specifically those mapped on invisible tags).

This fixes various bugs related to things not working because selclient() would
return NULL.

References: 94c8bd6048
2022-12-20 21:27:14 -06:00
Leonardo Hernández Hernández 686958a4cc fix unset fullscreen for all visible clients when mapping a new one
this also changes our policy about when we unset fullscreen:

dwl will unset fullscreen for clients who share tags (and monitor) with a newly
mapped client, it does not matter if the clients are visible or not
2022-12-20 21:21:40 -06:00
Leonardo Hernández Hernández 1a3d89e5b2 call checkidleinhibitor() in arrange() and not in focusclient() 2022-12-16 18:54:33 -06:00
Leonardo Hernández Hernández 7b1fe7e5f2 fix checking idle inhibit state
checking `bypass_surface_visibility` first, could cause that even if the idle
inhibitor is being destroyed it will disable idle tracking

and if we couldn't get its scene tree, then assume that the surface is visible
2022-12-16 17:37:18 -06:00
Leonardo Hernández Hernández 803a9ba98d Revert "Revert "Check that inhibitor scene tree is not null""
This reverts commit 035bb99d67.

Not checking `tree != NULL` result in a segfault if the surface doesn't have a
role (for example because it is a newly created surface)

Closes: https://github.com/djpohly/dwl/issues/359
2022-12-16 17:20:59 -06:00
Ben Jargowsky a39a46c908 Check width and height are not negative in client_set_bounds() 2022-12-15 23:42:53 -06:00
Leonardo Hernández Hernández 94c8bd6048 get sel from focustop() in focusstack()
Fixes: https://github.com/djpohly/dwl/issues/354
2022-12-09 20:55:58 -06:00
Leonardo Hernández Hernández c60f651951 Revert "force line-buffered stdout if stdout is not a tty"
This reverts commit deb48ff48b.

Fixes: https://github.com/djpohly/dwl/issues/253
2022-12-09 08:46:22 -06:00
Leonardo Hernández Hernández 98c7adfb3d Merge remote-tracking branch 'upstream/main' into wlroots-next 2022-12-06 14:21:44 -06:00
Leonardo Hernández Hernández 79b051f242 implement ext-session-lock-v1 2022-12-06 14:11:41 -06:00
Leonardo Hernández Hernández d42a977b5b Revert "remove unneeded changes in commitnotify()"
This reverts commit 30c24a53ad.

Bug: https://github.com/djpohly/dwl/issues/349
2022-12-06 13:59:14 -06:00
Leonardo Hernández Hernández 4a32293548 Revert "fix flickering when resizing/spawning windows"
This reverts commit 017bb7d752.

Bug: https://github.com/djpohly/dwl/issues/349
2022-12-06 13:58:56 -06:00
Leonardo Hernández Hernández 9136b6247d return early if couldn't find the popup's parent 2022-12-06 13:34:35 -06:00
Leonardo Hernández Hernández 19b5d47a9e fix popups appearing outside the monitor
and a potentially crash
2022-12-06 13:31:48 -06:00
Leonardo Hernández Hernández b5229636a3 Merge remote-tracking branch 'upstream/main' into wlroots-next 2022-12-05 23:43:47 -06:00
Leonardo Hernández Hernández c9a0a8bf6d bump version to 0.4-rc2 2022-12-05 23:21:21 -06:00
Leonardo Hernández Hernández 22336612ae improve type safety of toplevel_from_wlr_surface() 2022-12-05 23:18:02 -06:00
Leonardo Hernández Hernández 38bd00351a merge toplevel_from_{wlr_layer_surface,popup} into client_from_wlr_surface
now it is a big function called toplevel_from_wlr_surface
2022-12-05 23:18:01 -06:00
Leonardo Hernández Hernández c56bc42eb5 sort client_get_parent() 2022-12-05 23:18:01 -06:00
Leonardo Hernández Hernández 13b929d7d7 remove unneeded call to wlr_scene_rect_set_color()
wlr_scene_rect_create() requires a color as parameter
2022-12-05 23:06:53 -06:00
Leonardo Hernández Hernández b6d6127733 add option for set button map 2022-12-05 22:22:49 -06:00
Leonardo Hernández Hernández 02c257e0b1 update for wlroots!3627
References: https://gitlab.freedesktop.org/wlroots/wlroots/-/merge_requests/3627
2022-12-05 20:21:38 -06:00
Dima Krasner 16a49e9955 fix null deref in sigchld() if Xwayland is disabled 2022-12-03 13:30:30 -06:00
Palanix 30c24a53ad remove unneeded changes in commitnotify() 2022-12-03 13:14:10 -06:00
Palanix 017bb7d752 fix flickering when resizing/spawning windows
Fixes: https://github.com/djpohly/dwl/issues/306
2022-12-03 13:14:10 -06:00
Leonardo Hernández Hernández fac3b6f2cf use root surfaces to check idle inhibitors
References: https://github.com/djpohly/dwl/pull/343
2022-12-02 23:25:46 -06:00
Leonardo Hernández Hernández 035bb99d67 Revert "Check that inhibitor scene tree is not null"
This reverts commit 9c155eefdc.

This commit was applied just a workaround, the proper fix is the next commit
2022-12-02 23:25:04 -06:00
Leonardo Hernández Hernández 27ab9cf1b1 call updatemons() in requestmonstate()
This way we make sure that the Monitor's boxes are updated correctly
2022-12-02 23:17:05 -06:00
Ben Jargowsky 9c155eefdc Check that inhibitor scene tree is not null 2022-12-02 15:10:25 -06:00
Jan Beich df34fdd483 chase default terminal in manpage after 7710cf050d 2022-12-02 10:52:34 -06:00
Leonardo Hernández Hernández 1b39bbf316 Merge remote-tracking branch 'upstream/main' into wlroots-next 2022-12-02 10:39:06 -06:00
Leonardo Hernández Hernández 4c6050331e bump version to 0.4-rc1 2022-12-02 10:12:16 -06:00
Leonardo Hernández Hernández eaf8a21603 unset fullscreen when mapping a client in the same monitor
Fixes: https://github.com/djpohly/dwl/issues/327
2022-12-02 10:09:50 -06:00
Leonardo Hernández Hernández f929eaef1e ask for version instead of commit in bug reports 2022-12-02 10:08:18 -06:00
Leonardo Hernández Hernández ce1d040586 Merge branch 'main' of github.com:djpohly/dwl 2022-12-02 10:06:40 -06:00
Leonardo Hernández Hernández b4fb1f77c7 fix xwayland clients being floating by default
Fix 3213088aa2
References: https://github.com/djpohly/dwl/pull/334#issuecomment-1333147730
2022-12-01 20:51:00 -06:00
Leonardo Hernández Hernández 6df6781b43 simplify check for surface's node state
all `struct wlr_surface` should have a `wlr_scene_tree *` as data
2022-11-30 18:54:54 -06:00
Leonardo Hernández Hernández 10c56d6348 add option to allow invisible surfaces to disable idle tracking 2022-11-30 18:51:35 -06:00
Leonardo Hernández Hernández c91d21b68f do not move/resize if grabbed client is fullscreen 2022-11-30 17:54:47 -06:00
Leonardo Hernández Hernández 3213088aa2 do not try to set the parent's same tags and monitor for xwayland clients
References: https://github.com/djpohly/dwl/pull/334#issuecomment-1330166324
2022-11-30 17:42:58 -06:00
krypek 87d87cc404 Fix comparison between signed and unsigned int
When c->bw is 0, the right side of the MAX functions gets turned into an unsigned integer and that results in -1 being the outcome.
This causes big issues in xwayland clients.
2022-11-25 12:09:35 -06:00
Leonardo Hernández Hernández ea1b2dda63 Merge branch 'main' into wlroots-next 2022-11-21 20:51:30 -06:00
Leonardo Hernández Hernández 087373698a Revert "Add a configuration option for fullscreen locking"
now all fullcreen clients are rendered above tiled and floating clients

This partially reverts commit 326eee1444.
2022-11-21 20:50:39 -06:00
Leonardo Hernández Hernández caec566286 create a dedicated layer for fullscreen clients
Bug: https://github.com/djpohly/dwl/issues/327
2022-11-21 20:50:26 -06:00
Leonardo Hernández Hernández 05eca0e2d9 rename xwayland_surface to xsurface
this save us 2 lines
2022-11-21 14:28:05 -06:00
Leonardo Hernández Hernández 7eebe67787 set x and y of the layersurface's geometry box 2022-11-21 14:28:05 -06:00
Leonardo Hernández Hernández 63d6de5866 fix set of layersurface->popups and surface->data 2022-11-21 14:28:04 -06:00
Leonardo Hernández Hernández 60a98b87f3 inhibit idle if surface's node is enabled 2022-11-21 14:28:04 -06:00
Leonardo Hernández Hernández 93a911d6e9 simplify if expression in checkidleinhibitor() 2022-11-21 14:28:04 -06:00
Leonardo Hernández Hernández 88d386bfdc configurex11: resize floating clients and arrange tiled clients' monitor 2022-11-21 14:27:57 -06:00
Leonardo Hernández Hernández 972e3f3050 Merge branch 'wlroots-next' into main 2022-11-21 14:16:55 -06:00
Leonardo Hernández Hernández 569f554016 don't unfocus focused client when starting a drag
this fix chromium keyboard focus loss after a drag
Fix: 3cc22de712
2022-11-19 01:34:15 -06:00
Leonardo Hernández Hernández 21ef004886 listen to the output request_state event;
References: https://gitlab.freedesktop.org/wlroots/wlroots/-/merge_requests/2693
2022-11-15 23:52:21 -06:00
Leonardo Hernández Hernández dae00caadd update for wlroots!3861
References: https://gitlab.freedesktop.org/wlroots/wlroots/-/merge_requests/3861
2022-11-15 23:07:45 -06:00
Leonardo Hernández Hernández 5eb3529275 use the new scene helper for drag icons 2022-11-15 23:07:21 -06:00
Leonardo Hernández Hernández 359e7edc52 update for wlroots!3814
References: https://gitlab.freedesktop.org/wlroots/wlroots/-/merge_requests/3814
2022-11-15 23:04:39 -06:00
Leonardo Hernández Hernández 25dfdcc433 specify layer shell version 2022-11-15 23:04:02 -06:00
Leonardo Hernández Hernández fcb3fa4e90 Merge remote-tracking branch 'upstream/main' into wlroots-next 2022-11-10 23:25:48 -06:00
Leonardo Hernández Hernández b59c7f6a2e config.def.h: fix comment
Fixes: https://github.com/djpohly/dwl/issues/333
2022-11-10 23:14:03 -06:00
shua f1639ba9d5 check null in toplevel_from_popup
managed to SEGFAULT the server by trying to create a popup
without setting a parent first.

Not sure if this is dwl or wlroots issue, so also opened a ticket upstream: https://gitlab.freedesktop.org/wlroots/wlroots/-/merge_requests/3811
2022-11-09 00:01:50 -06:00
Leonardo Hernández Hernández 8bd3442575 layersurface: create a dedicated scene tree for popups
this tree should be always above the top layer

Fixes: https://github.com/djpohly/dwl/issues/328
2022-11-01 12:52:25 -06:00
Leonardo Hernández Hernández 3cc22de712 client: don't change border color during drags
Fixes: https://github.com/djpohly/dwl/issues/318
2022-10-31 23:46:02 -06:00
Leonardo Hernández Hernández 448a96de13 remove now unneeded workaround in outputmgrapplyortest() 2022-10-30 01:03:44 -05:00
Leonardo Hernández Hernández 99f062273e only destroy monitor's layer surfaces at destroy 2022-10-29 19:02:44 -05:00
Leonardo Hernández Hernández 8298f20a71 allow change adaptive sync in outputmgrapplyortest() 2022-10-29 18:30:09 -05:00
Leonardo Hernández Hernández 6a0ec2a8c3 Merge remote-tracking branch 'upstream/main' into wlroots-next 2022-10-29 18:11:28 -05:00
Leonardo Hernández Hernández 846ce52b92 fix crash in dirtomon() when selmon is disabled 2022-10-29 16:48:50 -05:00
Leonardo Hernández Hernández a9e2ebaf41 closemon() now updates selmon if needed 2022-10-29 16:48:50 -05:00
Leonardo Hernández Hernández 9b5f0f0fc5 use just one loop in outputmgrapplyortest()
we do the magic in updatemons()
2022-10-29 16:48:50 -05:00
Leonardo Hernández Hernández cb01ce9bcf move focus and clients off disabled monitors 2022-10-29 16:48:50 -05:00
Leonardo Hernández Hernández 9588b46b5c only raise the client's node in monocle()
Fixes: https://github.com/djpohly/dwl/issues/326
2022-10-29 16:47:17 -05:00
Leonardo Hernández Hernández 2f7834b130 sort util.c functions 2022-10-29 14:57:22 -05:00
Leonardo Hernández Hernández f494891a9a limit the line length to 79 in the readme 2022-10-29 14:47:24 -05:00
Leonardo Hernández Hernández fd2c47cb70 mention the polkit dependency when using elogind or systemd-logind
Bug: https://github.com/djpohly/dwl/issues/138
2022-10-29 14:09:38 -05:00
Leonardo Hernández Hernández 1eeb3689d3 add support for the ext-idle-notify-v1 protocol
for now we use macros to support both KDE idle and ext-idle, wlroots will
likely drop support for KDE idle in 0.17
2022-10-23 14:41:28 -05:00
Leonardo Hernández Hernández e9826de295 Revert "stop trying resize clients during commitnotify()"
This reverts commit 2d9d758c8d.

wasn't meant to be pushed to main
2022-10-15 18:25:58 -05:00
Leonardo Hernández Hernández 110cde8f67 update comment about exclusive focus in focusclient() 2022-10-15 18:09:42 -05:00
Leonardo Hernández Hernández 2d9d758c8d stop trying resize clients during commitnotify()
instead resize them in configurex11()
2022-10-15 18:00:55 -05:00
Leonardo Hernández Hernández 332ceb7136 allow unmanaged clients (like dzen or dmenu) to have keyboard focus 2022-10-15 18:00:24 -05:00
Leonardo Hernández Hernández 9e912cf790 delete the idle protocol xml file 2022-10-13 22:05:09 -05:00
Leonardo Hernández Hernández 4eabf6f7eb disable and destroy monitor's layer surfaces when it's being destroyed
Fixes: https://github.com/djpohly/dwl/issues/314
2022-10-11 13:11:14 -05:00
Leonardo Hernández Hernández 765656902f use /* */ for comments in applybounds() 2022-10-08 20:51:40 -05:00
Leonardo Hernández Hernández 1438dfc150 fix bad indentation in createpointer() 2022-10-08 20:51:05 -05:00
Leonardo Hernández Hernández 3902fba769 rename dragicondestroy() -> destroydragicon()
to match the rest of the code
2022-10-08 20:50:17 -05:00
Leonardo Hernández Hernández 7f3c9fa0ae rename LyrNoFocus -> LyrDragIcon 2022-10-08 20:48:48 -05:00
Leonardo Hernández Hernández 952fde68a3 correctly handle cursor motion when button is held (for layer surfaces) 2022-10-08 13:02:43 -05:00
Dima Krasner 0d1ca4663c allow moveresize() while the left mouse button is pressed
Fixes: https://github.com/djpohly/dwl/issues/319
2022-10-08 12:31:29 -05:00
Leonardo Hernández Hernández f6820a6c29 fix drag and drop not working
this fixes another issue where the cursor doesn't change when selecting text
but there is still an issue about not changing border color of clients during
dnd operations

Bug: https://github.com/djpohly/dwl/issues/318
2022-10-07 10:45:45 -05:00
Leonardo Hernández Hernández 87c4c1f629 convert some warnings to errors 2022-10-05 21:28:14 -05:00
Leonardo Hernández Hernández 8559141b30 avoid usage of goto
Based on this suggestion: https://github.com/guyuming76/dwl/commit/bc72af6e2430cfb8db2f5fa1b9800c86f445b6d6#commitcomment-85592855
2022-10-03 23:28:58 -05:00
Leonardo Hernández Hernández 434ed119f3 wlroots check map state of layersurfaces this for us 2022-10-01 23:33:17 -05:00
Leonardo Hernández Hernández ae3d435717 Merge remote-tracking branch 'djpohly/main' into wlroots-next 2022-10-01 23:30:47 -05:00
Leonardo Hernández Hernández b8bc54b65d properly handle cursor motion when button is held
Based on: https://gitlab.freedesktop.org/wlroots/wlroots/-/merge_requests/3653
2022-10-01 23:10:54 -05:00
Leonardo Hernández Hernández b5776e5180 avoid setting duplicate cursor image
Reference: https://gitlab.freedesktop.org/wlroots/wlroots/-/issues/3436
Based on: https://gitlab.freedesktop.org/wlroots/wlroots/-/merge_requests/3595
2022-09-28 17:11:04 -05:00
Leonardo Hernández Hernández c13d948ea9 destroy renderer and allocator in cleanup() 2022-09-28 14:15:25 -05:00
Leonardo Hernández Hernández fc8b2a8335 fix bad condition 2022-09-26 20:31:36 -05:00
Leonardo Hernández Hernández c00faae263 fix various segfaults when selmon is NULL 2022-09-26 19:07:45 -05:00
Leonardo Hernández Hernández e46238b95e change cursor surface in internal calls of motionnotify()
and call motionnotify() after unmapping a client
and when focusing a client

Fixes: https://github.com/djpohly/dwl/issues/308
2022-09-26 13:17:07 -05:00
Leonardo Hernández Hernández 2385d82612 remove unused variables 2022-09-20 23:40:35 -05:00
Leonardo Hernández Hernández 31106eff64 rework Makefile
- allow user to use a different pkg-config binary
- restore almost all (and add other ones) warning flags (-Werror is not set)
- $(XWAYLAND) is added to our CPPFLAGS
- remove useless comments
- don't generate idle-protocol.h (not used)
2022-09-20 23:34:48 -05:00
Leonardo Hernández Hernández 1fdc65ff93 make more permissive exclusive focus
now you can call focusstack() while a layer surface is focused and when it gets
unmapped the newly focused clients will be actually focused
2022-09-18 17:25:12 -05:00
Leonardo Hernández Hernández fbaeb85363 now really fix clients not being focused after unmapping a layer surface 2022-09-18 17:23:07 -05:00
Leonardo Hernández Hernández 570e6e2c27 fix clients not being focused after destroy a layer surface 2022-09-18 16:52:54 -05:00
Leonardo Hernández Hernández a1b33826cf Revert "remove useless check of m in arrangelayers()"
This partially reverts commit d14ee99661.

Checking if the output is enabled is necessary to avoid a segfault later
2022-09-18 16:36:38 -05:00
Leonardo Hernández Hernández d11358762d add missing library (xcb-icccm)
this library is also used by wlroots, so nothing new
2022-09-18 15:49:30 -05:00
Leonardo Hernández Hernández 7710cf050d change the default term to foot
it is closer to the suckless philosophy (foot implements things that the suckless
guys would say that should be done by tmux or something else, but I have no
desire to create a new terminal emulator, and the best fit is foot)

also alacritty uses +100Mb of memory, more that dwl itself (~90Mb)
and foot only ~20Mb
2022-09-18 15:37:16 -05:00
Leonardo Hernández Hernández d14ee99661 remove useless check of m in arrangelayers()
it is supossed to avoid a crash when we pass m=NULL as argument
however it would crash anyway and also because we should not pass m=NULL
2022-09-18 15:35:54 -05:00
Leonardo Hernández Hernández cd96f889b8 fix use of loop initial declaration
forbidden by the suckless style
2022-09-18 15:35:54 -05:00
Leonardo Hernández Hernández bc72af6e24 fix unmanaged clients not being unlinked from the commit listener 2022-09-18 15:35:54 -05:00
Leonardo Hernández Hernández bcc8ce7a40 fix segfault when unlocking swaylock on two monitor setup
wlr_*_surface_from_wlr_surface() can return NULL if the surface
is being destroyed

Fixes: https://github.com/djpohly/dwl/issues/305
2022-09-18 15:35:54 -05:00
Leonardo Hernández Hernández ba7dcb2dea don't try to move outputs when its x,y hasn't change
when using wlr_output_layout_move() wlroots internally
change the state of the output to manually configured and
when updating the layout these outputs aren't ignored by
wlroots, leaving us at our own
2022-09-10 23:54:57 -05:00
Leonardo Hernández Hernández c8a9f63451 prior run the startup command start the backend
this allow use clients like wlr-randr in the startup command
2022-09-10 23:54:56 -05:00
Leonardo Hernández Hernández fd67087a82 make sure the parent is mapped prior set monitor and tags 2022-09-10 23:45:14 -05:00
Leonardo Hernández Hernández 77ba8e5127 use wl_container_of() instead of data in some functions 2022-09-10 23:44:19 -05:00
Leonardo Hernández Hernández c509046663 add some comments 2022-09-10 23:42:58 -05:00
Leonardo Hernández Hernández 93de6e82a2 inline input_device in virtualkeyboard() 2022-09-10 22:25:46 -05:00
Leonardo Hernández Hernández f8f94c97f5 fix idle inhibitor check
previously we tried to get a client from the surface and then compare it with
the excluded surface, if we cannot get a client from the surface (e.g: a layer
surface) it just ignored all the next idle inhibitors no matter what

What I have should done is just checking if the excluded surface is equal to
the current idle inhibitor's surface and continue in case it is.
2022-09-10 22:11:06 -05:00
Leonardo Hernández Hernández 1bb9c4583a fix exclusive zone of unmapped layer surfaces
Fixes: https://github.com/djpohly/dwl/issues/302
2022-09-10 18:54:35 -05:00
Leonardo Hernández Hernández 9bcef3d040 resize the fullscreen background when resize the client 2022-09-08 16:35:55 -05:00
Leonardo Hernández Hernández ae42e4390b update link to input-protocols 2022-09-08 00:25:26 -05:00
Leonardo Hernández Hernández 303fc72b12 append -dev to $(_VERSION) (should have added it a long time ago) 2022-09-08 00:13:03 -05:00
Leonardo Hernández Hernández 871463c327 define _POSIX_C_SOURCE through CPPFLAGS
like dwm
2022-09-08 00:10:53 -05:00
Leonardo Hernández Hernández d1496a2a9b fix condition that always evaluate to false in commitlayersurfacenotify() 2022-09-07 23:54:57 -05:00
Leonardo Hernández Hernández 80084839a9 remove obsolete check of c->mon in fullscreennotify()
since 19a8a095eb it's checked in setfullscreen()
2022-09-07 23:24:50 -05:00
Leonardo Hernández Hernández 1aacfada29 set c->prev in setmon() and not in mapnotify() 2022-09-06 13:23:19 -05:00
Leonardo Hernández Hernández dc59f7733d enable adaptive sync if supported
but don't cause monitors to be ignored if it fails
2022-09-06 00:35:20 -05:00
Leonardo Hernández Hernández 14c010a0d6 only enable/disable clients from the specified monitor in arrange()
also fix a crash when m is null, this can only happen when selmon is NULL
2022-09-06 00:10:00 -05:00
Leonardo Hernández Hernández 14a1e3e2a2 set c->prev in mapnotify()
Closes: #300
2022-09-05 16:35:51 -05:00
Dmitry Zakharchenko a94d089c40 Minor changes to README 2022-09-05 16:15:54 -05:00
Dmitry Zakharchenko e91f71e8d6 Add direct irc link
Also, move IRC section to the top so that it's more accessible.
2022-09-02 20:14:18 -05:00
Leonardo Hernández Hernández 68576799b9 don't arrange layers on disabled monitors 2022-09-02 18:49:20 -05:00
Leonardo Hernández Hernández 19a8a095eb call setfullscreen() in setmon()
this will help when sending to another monitor a fullscreen client
and also will prevent a crash when a client request fullscreen when it has no monitor
2022-09-02 18:22:15 -05:00
Leonardo Hernández Hernández 1f59b76d77 prevent segfault when destroying monitors
also don't count unmapped surfaces for exclusive zone
and exclusive_focus is now of type `void *`
2022-09-02 18:17:53 -05:00
Leonardo Hernández Hernández 40b1c0b849 Revert "Revert "various improvements to layer surface""
This reverts commit c017916d35.
2022-09-02 16:54:53 -05:00
Leonardo Hernández Hernández c017916d35 Revert "various improvements to layer surface"
see https://github.com/djpohly/dwl/issues/289#issuecomment-1231287114

This reverts commit 2260519740.
2022-08-31 16:05:19 -05:00
Leonardo Hernández Hernández 2260519740 various improvements to layer surface
- remove various useless assignments of layersurface->mon
- styles changes
- do not set wlr_layer_surface->output to NULL at destroy
2022-08-29 21:32:59 -05:00
Leonardo Hernández Hernández 0e993b5fb1 conform the idle inhibitor protocol
previously we disable idle tracking simply due to the fact that it exist
2022-08-28 22:40:11 -05:00
Leonardo Hernández Hernández 83e37820d7 add support for the single pixel buffer protocol 2022-08-28 22:15:57 -05:00
Leonardo Hernández Hernández d738573e22 new function to notify keyboard enter 2022-08-27 16:34:29 -05:00
Leonardo Hernández Hernández b9295e8cee sort client.h functions 2022-08-27 16:33:46 -05:00
Leonardo Hernández Hernández e0cc5b046c Merge remote-tracking branch 'djpohly/main' into wlroots-next 2022-08-26 18:26:36 -05:00
Leonardo Hernández Hernández 406aebcbd2 prevent an infinite loop if try to use focusmon() with all monitors disabled 2022-08-25 00:20:21 -05:00
Leonardo Hernández Hernández dfcd142ce4 don't try to set monitor for clients in createmon()
this is done in updatemons()
2022-08-23 13:29:12 -05:00
Leonardo Hernández Hernández 07bf1832bf set monitor for clients that don't have one in updatemons()
only if selmon is enabled and the clients are mapped
2022-08-23 13:28:01 -05:00
Leonardo Hernández Hernández 174919ec53 set monitor for clients that don't have one on monitor creation 2022-08-18 16:55:13 -05:00
Leonardo Hernández Hernández a7f77160d1 don't respect size hints for fullscreen clients
Fixes: #292
2022-08-16 21:39:42 -05:00
Leonardo Hernández Hernández 7a343b98cf change type of c->bw: int -> unsigned int 2022-08-13 00:41:08 -05:00
Leonardo Hernández Hernández 8d2516e83c reorder isfullscreen in Client definition 2022-08-13 00:38:08 -05:00
Leonardo Hernández Hernández f173c56c32 initialize to zero the box used in commitnotify() 2022-08-13 00:12:46 -05:00
Leonardo Hernández Hernández 28af37cd1f handle client_from_wlr_surface() receiving a subsurface 2022-08-12 23:58:11 -05:00
Leonardo Hernández Hernández 48396a1bf8 fix crash when setting a custom mode 2022-08-12 23:21:25 -05:00
Leonardo Hernández Hernández b6e3fc1645 rework outputmgrapplyortest()
first disable requested monitors, then enable and/or change mode, x and y, etc.
This is mostly what sway does
2022-08-12 23:21:25 -05:00
Devin J. Pohly 3431ac165d 2200: let's use this wisely
Looks like [suckless-dev] was right about one thing.
2022-08-12 23:21:00 -05:00
Leonardo Hernández Hernández 6ce035303e fix dist target 2022-08-08 21:30:37 -05:00
Leonardo Hernández Hernández 620fd9dc56 use git describe to generate version 2022-08-08 21:19:16 -05:00
Leonardo Hernández Hernández 662e06e68e check client_from_wlr_surface() returning NULL in urgent()
fix #281
2022-07-30 14:44:17 -05:00
Dima Krasner 9d2eb8483b fix segfault if parent->mon is unset 2022-07-25 01:19:36 -05:00
Leonardo Hernández Hernández 7eee0a8229 use the layer surface to create popups 2022-07-24 16:43:13 -05:00
Leonardo Hernández Hernández b04c73be3d make sure we do not create a double fullscreen_bg
and also make sure we do not destroy it if it does not exist
Fixes: #274
2022-07-23 13:28:15 -05:00
Leonardo Hernández Hernández 8cdb997126 conform the xdg-protocol with fullscreen translucent clients
see `setfullscreen()` for more info
2022-07-23 02:17:00 -05:00
Leonardo Hernández Hernández 90a12c90a0 always set the same monitor and tags for child clients of a client
fixes #272
2022-07-19 20:13:56 -05:00
Leonardo Hernández Hernández e082292606 do not focus clients if a layer surface is focused 2022-07-19 12:24:24 -05:00
Dima Krasner deb48ff48b force line-buffered stdout if stdout is not a tty 2022-07-19 12:18:16 -05:00
Leonardo Hernández Hernández c70db2d06a Revert "only call wlr_seat_keyboard_notify_enter() if a keyboard is found"
This reverts commit 8e03bce621.
fixes #270
2022-07-19 11:52:42 -05:00
Leonardo Hernández Hernández e98719f552 remove a useless check
if `s->role_data == NULL`, wlr_*_surface_from_wlr_surface() will return NULL
and we are checking it
2022-07-15 00:48:28 -05:00
Leonardo Hernández Hernández 058c699ac2 only set bounds for clients that support it 2022-07-15 00:27:31 -05:00
David-Valters af12e777f2 Update README.md 2022-07-13 20:19:43 -05:00
Leonardo Hernández Hernández 8e03bce621 only call wlr_seat_keyboard_notify_enter() if a keyboard is found 2022-07-07 00:21:51 -05:00
Leonardo Hernández Hernández 87fc3a58ab check pointer focus in arrange() 2022-07-06 23:48:53 -05:00
Leonardo Hernández Hernández 0eff78d6c2 include DWLCFLAGS into linking step 2022-07-06 23:41:42 -05:00
Leonardo Hernández Hernández c6d97f1db7 arrange client's monitor if size has change since last commit 2022-07-06 22:20:21 -05:00
Leonardo Hernández Hernández 829dec6598 resize now takes struct wlr_box as parameter 2022-07-06 22:18:46 -05:00
Leonardo Hernández Hernández ff70337c16 check current and pending geometry to set c->resize to zero
Fixes #260
2022-07-06 22:16:00 -05:00
Ben Jargowsky 7cc6c640e2 Checks for overflows for client max width and height 2022-06-29 00:35:06 +02:00
Leonardo Hernández Hernández 72e0a560d9 respect size hints 2022-06-24 19:19:20 -05:00
Leonardo Hernández Hernández 2aa391361c inline unmaplayersurface() into unmaplayersurfacenotify()
unmap signal is guaranted to be emitted before destroy signal
so is useless checking if it is mapped at destroy
2022-06-24 15:36:13 -05:00
Leonardo Hernández Hernández 549335ae54 avoid layer surface popups appearing below x{dg,wayland} clients 2022-06-24 14:46:08 -05:00
Leonardo Hernández Hernández 097b4a30f5 unconstrain layer shell popups from monitor size
unconstrain other popups from monitor usable area
2022-06-24 14:30:52 -05:00
Leonardo Hernández Hernández 461d02d3e0 chase wlroots input_device changes 2022-06-21 16:25:18 -05:00
Leonardo Hernández Hernández c1578bc14d use LayerSurface.mon when possible 2022-06-21 16:03:20 -05:00
Leonardo Hernández Hernández 9b84940e37 unconstrain layer shell popups
also unconstrain popups from monitor's usable area
2022-06-21 00:23:21 -05:00
Leonardo Hernández Hernández 79ad72413d don't set c->isfullscreen to zero
calloc initializes all fields to zero
2022-06-20 18:05:16 -05:00
Sevz 74fce9d918 Merge pull request #257 from fauxmight/bar_options
Add known dwl status bar options to README
2022-06-18 13:00:08 -05:00
A Frederick Christensen 553ba5b7c8 Add known dwl tag status bar options to README.md 2022-06-18 03:04:00 -05:00
Leonardo Hernández Hernández 4ae6d0f387 move ugglyness to client.h 2022-06-16 15:54:13 -05:00
Leonardo Hernández Hernández 2ef5abfb72 remove unneeded check in focusclient() 2022-06-16 15:36:27 -05:00
Sevz 8076b47cc6 Merge pull request #251 from gwnichol/fixinstall
Fix make install while files are in use
2022-06-14 15:43:09 -05:00
Sevz 3a77f02919 Merge pull request #247 from Humm42/xkboptions
initialize xkb_rules.options to a null pointer
2022-06-14 15:42:47 -05:00
Leonardo Hernández Hernández d26ddfc7fd kill child process in cleanup() 2022-06-14 15:31:39 -05:00
Grant Nichol 671a9b450b Fix make install while files are in use
When the dwl executable is in use, cp fails without the -f flag.

POSIX defines this flag with:
> If a file descriptor for a destination file cannot be obtained,
> as described in step 3.a.ii., attempt to unlink the destination
> file and proceed.
2022-06-12 15:58:38 -05:00
Leonardo Hernández Hernández 583f471cfe add some blank lines 2022-06-10 12:32:22 -05:00
Marco Siedentopf 8bce3b1583 add click method configuration option
Add the libinput configuration option to choose between Software Button Areas and Clickfinger
2022-06-10 12:27:40 -05:00
Leonardo Hernández Hernández c008bf2a7d add $(LIBS) to $(LDLIBS) 2022-06-10 12:21:23 -05:00
Dima Krasner c990dbd441 fix link failure with --as-needed 2022-06-10 19:26:45 +03:00
Leonardo Hernández Hernández a32db11f16 set client bounds at resize 2022-06-09 12:45:42 -05:00
Leonardo Hernández Hernández 948fdcf709 use xdg-shell v4 2022-06-09 12:45:02 -05:00
Leonardo Hernández Hernández 4b890336e2 use xdg-shell v3 2022-06-07 00:55:41 -05:00
Leonardo Hernández Hernández c7007b4811 chase wlroots scene-tree changes 2022-06-07 00:31:58 -05:00
Leonardo Hernández Hernández d969289baf use LDFLAGS to build dwl target 2022-06-06 23:36:45 -05:00
Leonardo Hernández Hernández 50b6630f3d do not generate *-protocol.{c,o}
according with
https://gitlab.freedesktop.org/wlroots/wlroots/-/commit/62fbf3f4ba1b2993e29dfb46f077e5806f7aac1c
they are unused and wlroots-based compositors don't need to do this
2022-06-06 22:54:40 -05:00
Leonardo Hernández Hernández 14641560b0 include xcb only when building with xwayland support 2022-06-06 22:53:36 -05:00
KawaiiAmber 7b42232ad1 convert makefile to be more portable 2022-06-06 22:53:36 -05:00
Leonardo Hernández Hernández a5a0674f6a improve client_from_wlr_surface() 2022-06-06 22:51:58 -05:00
Leonardo Hernández Hernández 4dfa45659a fix compiler error with gcc complaining about parentheses
dwl.c: In function ‘unmaplayersurface’:
dwl.c:2253:9: error: suggest parentheses around assignment used as truth value [-Werror=parentheses]
 2253 |         layersurface->layer_surface->mapped = layersurface->mapped = 0;
      |         ^~~~~~~~~~~~
cc1: all warnings being treated as errors
make: *** [<builtin>: dwl.o] Error 1

clang not affected
2022-06-05 16:57:20 -05:00
Leonardo Hernández Hernández b91017e713 disable scene node at unmaplayersurface() 2022-06-05 15:27:40 -05:00
Lennart Jablonka 70da04a714 initialize xkb_rules.options to a null pointer
Initializing it to an empty string had broken configuring xkbcommon
through the environment (XKB_DEFAULT_OPTIONS).

Fixes: ae31391115 ("initialize rules and xkb_rules")
2022-06-03 01:23:35 +02:00
Leonardo Hernández Hernández 2623a96ebf call client_set-size() if client has a resize 2022-05-27 00:19:17 -05:00
Leonardo Hernández Hernández 52e0d00942 check client_surface() returning NULL
now client_surface()->data is a pointer to the wlr_scene_tree of clients
which allows us to not call wlr_scene_node_lower_to_bottom() for every clients
2022-05-25 17:12:44 -05:00
Leonardo Hernández Hernández 7018b9b65c correct libinput function name for drag_lock 2022-05-25 15:01:38 -05:00
Leonardo Hernández Hernández 48ec914f43 destroy layersurface's scene node in destroylayersurfacenotify() 2022-05-25 14:49:32 -05:00
Leonardo Hernández Hernández 40449fa64f add a new function to get a client from a wlr_surface 2022-05-23 10:55:28 -05:00
Ben Jargowsky ecbc2c61db Add configuration options for touchpads 2022-05-23 00:01:47 +02:00
Leonardo Hernández Hernández 283c043b5c chase wlroots scene-surface refactor 2022-05-21 20:44:08 -05:00
Leonardo Hernández Hernández 88a8b784d0 Merge remote-tracking branch 'djpohly/main' into wlroots-next
chase wlroots X11 hints update
2022-05-17 15:31:31 -05:00
Leonardo Hernández Hernández 8870ba0bb8 implement urgency hints for xwayland clients 2022-05-17 14:38:18 -05:00
Leonardo Hernández Hernández 5de68ba713 sync manpage and help info
Signed-off-by: Leonardo Hernández Hernández <leohdz172@protonmail.com>
2022-05-17 13:26:57 -05:00
Leonardo Hernández Hernández 79a148224f specify version in wlr_xdg_shell_create() 2022-05-15 17:17:58 -05:00
Ben Jargowsky 2f8736b986 Check if XWayland client size_hints are NULL 2022-05-15 23:09:21 +02:00
Leonardo Hernández Hernández 3c11ad9aa6 fix segfault when dragging chromium tabs 2022-05-14 00:29:35 -05:00
Ben Jargowsky 06d9230a96 Run focusclient when switching to monocle layout 2022-05-13 10:20:28 +02:00
Leonardo Hernández Hernández dca68f9aa1 Merge remote-tracking branch 'djpohly/main' into wlroots-next 2022-05-10 20:08:41 -05:00
Leonardo Hernández Hernández 22bd75226b remove trailing whitespaces 2022-05-10 11:42:40 -05:00
Leonardo Hernández Hernández 063736f898 add -v flag to the manpage
Thanks @Humm42
2022-05-10 11:39:33 -05:00
Leonardo Hernández Hernández d5a741c9b4 add dist target 2022-05-09 16:25:03 -05:00
Leonardo Hernández Hernández 5d8084daa7 add flag to print version and exit 2022-05-09 16:24:36 -05:00
Sevz 07d56c6d7b Merge pull request #230 from BenJarg/null-wlr_seat_get_keyboard
Handle 'wlr_seat_get_keyboard' possibly returning null.
2022-05-09 13:18:19 -05:00
Ben Jargowsky e0d310fd84 Handle 'wlr_seat_get_keyboard' possibly returning null. 2022-05-09 14:00:21 +02:00
Leonardo Hernández Hernández 31fa6600a1 replace wlr_xwayland_surface_size_hints with xcb_size_hints_t 2022-05-08 17:51:42 -05:00
Leonardo Hernández Hernández 3a4b7d104f restack xwayland surface on focusclient() 2022-04-29 17:45:02 -05:00
Ben Jargowsky d071a899f3 Run printstatus() when a monitor is removed 2022-04-25 13:50:53 -07:00
Leonardo Hernández Hernández dc7709a00e schedule a configure on maximize request
see maximizenotify() for more info
2022-04-16 15:51:13 -05:00
Leonardo Hernández Hernández a48ce99e6a use pointer math in xytonode() 2022-04-15 17:40:02 -05:00
Leonardo Hernández Hernández 4a2e761914 replace deleted EBARF() with die() 2022-04-12 23:52:05 -05:00
Leonardo Hernández Hernández b86fcf6504 add missing return in client_is_floating_type()
This causes all Xwayland clients to be treated as floating
2022-04-10 21:38:48 -05:00
Leonardo Hernández Hernández 29a2b647b2 Merge remote-tracking branch 'djpohly/main' into HEAD 2022-04-08 21:12:32 -05:00
Leonardo Hernández Hernández c00697e643 abc 2022-04-05 23:04:04 -05:00
Leonardo Hernández Hernández af741e586b typedefs: abc 2022-04-05 22:15:46 -05:00
Leonardo Hernández Hernández 02ac9378c4 includes: abc 2022-04-05 22:07:59 -05:00
Devin J. Pohly 437aea8662 It's past my bedtime. 2022-04-03 00:14:08 -05:00
Devin J. Pohly 6901743b0c Remove removed fields from struct instances 2022-04-03 00:13:11 -05:00
Devin J. Pohly 720f56161e Remove vestigial monitor configuration info
The x/y fields in monitor rules are unused and were meant to be deleted.
Also removes the outdated comment in config.h.
2022-04-03 00:01:52 -05:00
Leonardo Hernández Hernández 4d3adea683 die on pipe failure 2022-03-31 15:32:30 -06:00
Raphael Robatsch 79b7e755b0 Layer shell: Prevent infinte configure/commit loop
Check the wlr_layer_surface_v1_state.committed bitmask to see if we need
to rearrange. This is also what sway does.

Without this check, every commit request (even if only the attached buffer
changed) will lead to another configure event, which will lead to another
commit, etc.

This loop results in swaybg consuming 100% CPU.

Co-authored-by: Owen Rafferty <owen@owenrafferty.com>
2022-03-31 15:27:13 -06:00
Leonardo Hernández Hernández b424602ebc add DESTDIR 2022-03-31 09:43:56 -06:00
Leonardo Hernández Hernández ae31391115 initialize rules and xkb_rules
to fix compile errors with `-pedantic`
2022-03-31 09:34:22 -06:00
Leonardo Hernández Hernández 2d6f932ecf don't let -pedantic be overridable by environment 2022-03-31 09:21:27 -06:00
Devin J. Pohly dd0b8e4c37 Merge pull request #212 from djpohly/xwaitland
make sure to leave XWayland process waitable
2022-03-29 16:22:44 -05:00
Devin J. Pohly 0ddde0c85a move sigchld() into XWayland section 2022-03-29 16:09:29 -05:00
Devin J. Pohly e08bd12922 make sure to leave XWayland process waitable
On SIGCHLD, check to make sure the terminated process is not the
XWayland process before reaping it, allowing wlroots to waitpid() for it
successfully.

Fixes #177.
2022-03-29 15:55:06 -05:00
Leonardo Hernández Hernández aab397c30b new functions ecalloc() and die()
die() replaces EBARF and BARF
and allow us to add `-pedantic` to CFLAGS
2022-03-28 15:02:09 -06:00
Leonardo Hernández Hernández 7018ed9218 createpointer now takes wlr_pointer 2022-03-25 15:27:36 -06:00
Leonardo Hernández Hernández f75e426222 createkeyboard now takes wlr_keyboard 2022-03-25 15:27:36 -06:00
Leonardo Hernández Hernández cb4265ac8c check m in commitlayersurfacenotify() 2022-03-24 14:19:08 -06:00
Leonardo Hernández Hernández a95338ca43 implement input-inhibitor protocol 2022-03-24 11:41:24 -06:00
Leonardo Hernández Hernández ae614ee512 implement idle-inhibitor protocol
This allows clients to disable idle monitoring
2022-03-24 11:35:19 -06:00
Leonardo Hernández Hernández faaee90cbd destroy scene_output in cleanupmon() 2022-03-23 18:22:41 -06:00
Leonardo Hernández Hernández 3e79a9a5d7 fix drag icon's surface returned by xytonode 2022-03-23 18:22:40 -06:00
Leonardo Hernández Hernández c2899bc00b set position of the drag icon in startdrag() 2022-03-23 18:22:40 -06:00
Leonardo Hernández Hernández f353a0e759 Revert "clients now works as expected in drag motion"
This reverts commit 9aec6049ec.

this problem is caused because xytonode() returns the surface of the
drag icon
2022-03-23 18:22:40 -06:00
Guido Cella 281c947e5f inline the presentation variable
This variable can be removed since with scene-graph
wlr_presentation_surface_sampled_on_output no longer needs to be called.
2022-03-23 18:22:40 -06:00
Leonardo Hernández Hernández 855e6c1898 add note about how to change MODKEY for windows key 2022-03-23 18:22:40 -06:00
Palanix a41d6cb00f Fix dwl freezing when resizing 2022-03-23 18:22:40 -06:00
Quentin Rameau b42abeac69 Add a configuration option for fullscreen locking
Some people are annoyed to have this new behaviour forced for some
application which use fake fullscreen.
2022-03-23 18:22:40 -06:00
Leonardo Hernández Hernández 5a1debb5f0 add sway LICENSE file
part of the code in dwl is taken from sway, so credit it.
dwm and sway are both licensed under the MIT license
2022-03-23 18:22:40 -06:00
Guido Cella 1a5b7e068b update IRC channel 2022-03-23 18:22:40 -06:00
Humm 0db6f3c5b5 add dwl(1)
Documentation is good.  Man pages are documentation.  A program without
a man page is worthless.
2022-03-23 18:22:40 -06:00
Leonardo Hernández Hernández d8ab893dab clients now works as expected in drag motion 2022-03-23 18:22:40 -06:00
Guido Cella f2be10fd43 implement drag and drop
For brevity, only a single drag icon at a time is supported.

Co-authored-by: Leonardo Hernández Hernández <leohdz172@protonmail.com>
2022-03-23 18:22:39 -06:00
Sevz 23af627d80 Update issue templates 2022-03-23 18:22:39 -06:00
Leonardo Hernández Hernández a7f7777907 only skip frames if there are visible clients that have a resize 2022-03-23 18:22:39 -06:00
Leonardo Hernández Hernández 40db9c88ea remove a useless resize in mapnotify()
applyrules() calls setmon() which calls resize()
2022-03-23 18:22:39 -06:00
Leonardo Hernández Hernández 4276410a3d improve floating detection
mostly copied from sway
2022-03-23 18:22:39 -06:00
Leonardo Hernández Hernández feb972acd0 fix drag icon's surface returned by xytonode 2022-03-23 15:34:17 -06:00
Leonardo Hernández Hernández bf8cc526de set position of the drag icon in startdrag() 2022-03-23 15:30:35 -06:00
Leonardo Hernández Hernández 7a2e0eef74 Revert "clients now works as expected in drag motion"
This reverts commit 9aec6049ec.

this problem is caused because xytonode() returns the surface of the
drag icon
2022-03-23 15:29:32 -06:00
Guido Cella 3bace9ce6b inline the presentation variable
This variable can be removed since with scene-graph
wlr_presentation_surface_sampled_on_output no longer needs to be called.
2022-03-23 22:01:04 +01:00
Leonardo Hernández Hernández 4ef8999624 add note about how to change MODKEY for windows key 2022-03-23 14:03:43 -06:00
Palanix 7d724dc7f3 Fix dwl freezing when resizing 2022-03-23 12:09:24 -06:00
Leonardo Hernández Hernández 0662bc5a69 wlr_seat_set_keyboard() now takes wlr_keyboard as parameter 2022-03-23 09:01:01 -06:00
Quentin Rameau 326eee1444 Add a configuration option for fullscreen locking
Some people are annoyed to have this new behaviour forced for some
application which use fake fullscreen.
2022-03-22 23:51:56 -06:00
Leonardo Hernández Hernández d8f430accf add sway LICENSE file
part of the code in dwl is taken from sway, so credit it.
dwm and sway are both licensed under the MIT license
2022-03-22 23:44:53 -06:00
Sevz 6aed9dc1ac Merge pull request #137 from guidocella/libera
update IRC channel
2022-03-22 17:49:06 -06:00
Sevz 358562e2df Merge pull request #180 from Humm42/manpage
add dwl(1)
2022-03-22 16:26:38 -06:00
Leonardo Hernández Hernández 9aec6049ec clients now works as expected in drag motion 2022-03-22 15:02:02 -06:00
Guido Cella 330792b1fc implement drag and drop
For brevity, only a single drag icon at a time is supported.

Co-authored-by: Leonardo Hernández Hernández <leohdz172@protonmail.com>
2022-03-22 01:10:08 -06:00
Sevz 86fe15f76c Update issue templates 2022-03-21 22:34:30 -06:00
Leonardo Hernández Hernández ee1a72211d only skip frames if there are visible clients that have a resize 2022-03-21 21:41:38 -06:00
Leonardo Hernández Hernández 2bc01debdc remove a useless resize in mapnotify()
applyrules() calls setmon() which calls resize()
2022-03-21 14:21:33 -06:00
Leonardo Hernández Hernández c50f187c1f improve floating detection
mostly copied from sway
2022-03-21 14:21:31 -06:00
Leonardo Hernández Hernández 0dea553428 destroy scene_output in cleanupmon() 2022-03-20 19:09:28 -06:00
Leonardo Hernández Hernández a66210ebbc Merge branch 'main' into wlroots-next 2022-03-20 16:02:18 -06:00
Sevz 44932053ba Merge pull request #204 from djpohly/scenegraph3
merge scenegraph3
2022-03-20 12:48:15 -06:00
Leonardo Hernández Hernández dd463b25c7 remove independents list 2022-03-20 12:32:44 -06:00
Leonardo Hernández Hernández c8290f8c55 Merge branch 'wlroots-next' into scenegraph-wlroots-next 2022-03-18 17:21:41 -06:00
Leonardo Hernández Hernández 98f33cd01d follow up wlroots input device events renaming 2022-03-18 17:20:31 -06:00
Leonardo Hernández Hernández 19c14b058c remove unneeded variables 2022-03-18 11:04:34 -06:00
Leonardo Hernández Hernández e645ea8301 attach presentation to scene 2022-03-18 10:40:40 -06:00
Leonardo Hernández Hernández e4bf83e26d update README.md 2022-03-18 01:43:30 -06:00
Leonardo Hernández Hernández d50bb97f56 Merge branch 'main' into scenegraph 2022-03-18 01:31:28 -06:00
Leonardo Hernández Hernández 475c134144 do not allow set client size less than its min size 2022-03-18 01:27:33 -06:00
Leonardo Hernández Hernández 467123dc99 make sure to destroy wlr_scene_node of unmanaged clients 2022-03-18 01:03:33 -06:00
Leonardo Hernández Hernández 254f799fde do not create borders for unmanaged clients 2022-03-18 01:02:50 -06:00
Leonardo Hernández Hernández 0815626d4c pointerfocus: only use provided surface
if a client is given focus it
2022-03-18 00:59:52 -06:00
Leonardo Hernández Hernández 1b22ef1616 use xdg_shell helper
for xwayland continue using wlr_scene_subsurface_create()
2022-03-18 00:52:21 -06:00
Leonardo Hernández Hernández f1c92b05fb get old client by surface's node 2022-03-18 00:49:47 -06:00
Leonardo Hernández Hernández 1dfd867d9c fix crash of Firefox when opening a popup larger than its size 2022-03-17 21:28:07 -06:00
Leonardo Hernández Hernández 294fb324d8 constraint popups to its parent client
Closes: #146
Closes: #155
2022-03-16 23:08:17 -06:00
Leonardo Hernández Hernández 79f85bde99 Merge branch 'main' into scenegraph 2022-03-16 21:54:16 -06:00
Leonardo Hernández Hernández 2768af5a9b make sure configure and activate listeners are removed from list 2022-03-16 21:42:45 -06:00
Leonardo Hernandez Hernandez 863eedd05e set correct position for unmanaged clients
- don't allow to move/resize with them
- don't focus unmanaged clients on buttonpress()
2022-03-16 09:27:09 -06:00
Leonardo Hernandez Hernandez b92c0ff57f add support for layer_shell popups 2022-03-16 09:27:09 -06:00
Leonardo Hernandez Hernandez 1087bc5db9 use wlr_scene_xdg_surface_create() for xdg_popups 2022-03-16 08:48:41 -06:00
Leonardo Hernández Hernández 88f241d1cf Merge branch 'fix-segfault-in-fullscreennotify' 2022-03-13 21:32:55 -06:00
Leonardo Hernández Hernández 43228bd493 don't use fullscreen event in fullscreennotify() 2022-03-13 21:31:57 -06:00
Leonardo Hernández Hernández ebff6e38a0 always call arrange() on setfullscreen()
also don't count full screen clients on tile()
2022-03-13 17:11:52 -06:00
Leonardo Hernández Hernández 2cd0b3173d print status about floating and fullscreen 2022-03-13 15:46:32 -06:00
Humm 0c4740b277 add dwl(1)
Documentation is good.  Man pages are documentation.  A program without
a man page is worthless.
2022-03-13 00:46:24 +01:00
Leonardo Hernández Hernández 08020d61b7 more style fixes 2022-03-11 23:02:37 -06:00
Leonardo Hernández Hernández 4d26d30220 suckless style: don't use '//' for comments 2022-03-11 18:52:22 -06:00
Leonardo Hernandez Hernandez 0e5d7124de use loop to call arrangelayer
zwlr_layer_shell_v1_layer are ordered by bottom-most first so we can
just use a loop from 3 to 0
2022-03-11 18:46:13 -06:00
Sevz c49a42ee58 Merge pull request #196 from noocsharp/main
die on allocation failure
2022-03-11 18:40:45 -06:00
Leonardo Hernandez Hernandez a7c4f6100a use scene layer shell helper 2022-03-11 16:03:58 -06:00
Leonardo Hernández Hernández 3577802541 Merge branch 'wlroots-next' into scenegraph-wlroots-next 2022-03-11 16:02:00 -06:00
Leonardo Hernandez Hernandez 4465dcb6da fix left border 'y' position
also add comment about border ordering
2022-03-11 15:11:02 -06:00
Leonardo Hernandez Hernandez b97d9e1ce1 use wlr_scene_node_raise_to_top() 2022-03-11 15:07:57 -06:00
Leonardo Hernandez Hernandez 2b2f72d7c2 use wlr_scene_output_send_frame_done() 2022-03-11 15:05:49 -06:00
Leonardo Hernández Hernández 05a473335e use wlr_box for previous geom 2022-03-10 14:48:14 -06:00
Leonardo Hernández Hernández 5d9c9a9a68 don't warn about unused result
Closes: #186
2022-03-10 14:34:36 -06:00
Leonardo Hernández Hernández f673305e86 replace tabs by spaces in alignment 2022-03-10 14:08:57 -06:00
Leonardo Hernandez Hernandez 8cace19218 fix crash when the last monitor is disconnected 2022-03-10 14:08:57 -06:00
Leonardo Hernández Hernández 230d3432e9 wlr_virtual_keyboard_v1 now has its own wlr_keyboard
which has its own wlr_input_device

Signed-off-by: Leonardo Hernández Hernández <leohdz172@protonmail.com>
2022-03-10 10:37:18 -06:00
Leonardo Hernández Hernández 432c15fb09 Merge branch 'main' into wlroots-next 2022-03-10 10:34:43 -06:00
Leonardo Hernandez Hernandez 3e6d584de1 update URL to wlroots project (GitHub->GitLab) 2022-03-10 10:23:00 -06:00
Sevz ebed67596d Merge pull request #187 from fauxmight/new-clients-printstatus
Newly launched or closed clients ALWAYS generate status update
2022-03-10 10:21:04 -06:00
Sevz f83f1049db Merge pull request #149 from xi/fix-grabc-unmap
reset cursor mode when grabc is unmapped
2022-03-10 10:16:49 -06:00
Sevz 2630664fef Merge pull request #193 from fauxmight/chasing-wlroots
Chasing wlroots
2022-03-10 10:11:17 -06:00
Leonardo Hernandez Hernandez d1ff1e6f75 remove typedef Decoration 2022-03-08 18:17:21 -06:00
Nihal Jere b0098d9d09 die on allocation failure 2022-02-22 23:07:49 -06:00
Devin J. Pohly 2d2c21664c Merge pull request #181 from Armael/fix-client_set_tiled
fix client_set_tiled which is currently ignoring its "edges" argument
2022-02-15 16:20:22 -06:00
Devin J. Pohly 52a33a2f1e Merge branch 'scenegraph3' of github:djpohly/dwl into scenegraph3 2022-02-15 14:16:20 -06:00
Devin J. Pohly 9090106334 Merge pull request #164 from Sevz17/change-border-color
Change border color according to focus state
2022-02-15 14:16:11 -06:00
Devin J. Pohly a15cb1e20e Merge pull request #160 from Humm42/closepipes
-s: close unused fds
2022-02-15 14:04:25 -06:00
Devin J. Pohly b860932cda Merge branch 'scenegraph3' of github:djpohly/dwl into scenegraph3 2022-02-15 14:03:29 -06:00
Devin J. Pohly 22a6f6661a Merge pull request #151 from Sevz17/scenegraph3
send frame_done also to all layer surfaces
2022-02-15 14:03:04 -06:00
Devin J. Pohly bda7b31174 Merge pull request #189 from fauxmight/shift-6-is-asciicircum
Shift+6 generates XKB_KEY_asciicircum
2022-02-15 13:57:07 -06:00
A Frederick Christensen 76b3756d11 Merge remote-tracking branch 'origin/wlroots-xdg-shell-refactor' into chasing-wlroots 2022-02-03 23:23:53 -06:00
A Frederick Christensen 97881c88c7 Merge remote-tracking branch 'origin/output-layout-get-box-update' into chasing-wlroots 2022-02-03 23:22:19 -06:00
A Frederick Christensen b8ce8d0fbb Account for changes expecting wlr_xdg_toplevel rather than wlr_xdg_surface 2022-02-03 21:54:44 -06:00
A Frederick Christensen ed44bc0c90 update wlr-output-layout-get-box 2022-02-02 23:18:58 -06:00
A Frederick Christensen ac896a7df4 Shift+6 generates XKB_KEY_asciicircum 2022-02-01 18:58:32 -06:00
A Frederick Christensen 3300f6c911 Upgrade for wlroots surface refactoring
See [1] for details.

[1]: https://gitlab.freedesktop.org/wlroots/wlroots/-/merge_requests/3412
2022-01-18 11:33:56 -06:00
Armaël Guéneau f587b2fd2c fix client_set_tiled, which was ignoring its "edges" argument 2022-01-08 17:41:45 +01:00
A Frederick Christensen 317175da08 Newly launched or closed clients ALWAYS generate status update
Prior to this change, if a client whose tag(s) are not currently
selected is launched or killed, no update to status was printed and
status bars being fed by printstatus() did not update newly active
or newly inactive (but unselected) tags.
2021-12-31 14:51:50 -06:00
Devin J. Pohly f4ae4c1a0b Merge branch 'main' into scenegraph3 2021-12-22 12:43:07 -06:00
Devin J. Pohly 27514b9593 Merge branch 'wlroots-next' into scenegraph3 2021-12-16 11:51:15 -06:00
Devin J. Pohly 2315462f96 Merge commit 'refs/pull/162/head' of github:djpohly/dwl into scenegraph3 2021-12-16 10:59:13 -06:00
Devin J. Pohly c71a3ac594 Merge branch 'wlroots-next' of github:djpohly/dwl into scenegraph3 2021-12-16 10:52:49 -06:00
Raphael Robatsch 03e167dbb7 fullscreennotify: don't crash if called before map
SDL2 calls xdg_toplevel.unset_fullscreen() before the surface is
mapped. This causes a segfault in dwl because setfullscreen() expects
the surface to be mapped already.
Therefore, delay the setfullscreen call until the surface is mapped.
2021-11-13 22:19:55 -06:00
Leonardo Hernandez Hernandez 894f2a3152 change border color according to focus state 2021-10-31 15:32:49 -06:00
Leonardo Hernandez Hernandez 05ac420342 Merge branch 'wlroots-next' into HEAD 2021-10-26 21:24:35 -05:00
Humm ebfefa84ba -s: close unused fds
dup2 doesn’t close fds, it only duplicates them.  The old ones weren’t
closed, causing problems (like dwl blocking due to the child process
never reading from the reading end, even if stdin has been closed).
2021-10-13 23:11:40 +02:00
Leonardo Hernandez Hernandez 2c9423d1b7 wlr_xdg_surface.configure_serial has been moved into wlr_xdg_surface_state
as seen in swaywm/wlroots@0e34208
2021-10-03 22:08:00 -05:00
Leonardo Hernandez Hernandez df332de9d2 send frame_done also to all layer surfaces
this fixes an issue when bemenu don't update his surface when typing
2021-10-02 22:24:04 -05:00
Devin J. Pohly 7de6920bd7 send frame_done to all visible surfaces 2021-09-21 14:42:36 -05:00
Devin J. Pohly c8bf457c0f fixup: follow name change on surface_tree_create 2021-09-21 10:42:43 -05:00
Devin J. Pohly 0146a9954b use scene_output for damage-tracked rendering 2021-09-08 23:24:11 -05:00
Devin J. Pohly be6f573b4e use scene to keep track of LayerSurfaces' layers 2021-09-08 23:24:11 -05:00
Devin J. Pohly 1b38801eef use scene-graph API for Client/LayerSurface 2021-09-08 23:24:11 -05:00
Devin J. Pohly 929d3d9569 use type enum to distinguish Client from LayerSurface 2021-09-08 23:24:11 -05:00
Tobias Bengfort 79dcc0d327 reset cursor mode when grabc is unmapped 2021-09-04 13:47:49 +02:00
Guido Cella 8aa50dfdf1 update IRC channel 2021-08-03 06:29:26 +02:00
19 changed files with 2953 additions and 1383 deletions
+62
View File
@@ -0,0 +1,62 @@
name: Bug Report
about: Something in dwl isn't working correctly
title:
labels:
- 'Kind/Bug'
body:
- type: markdown
attributes:
value: |
- Only report bugs that can be reproduced on the main (or wlroots-next) branch without patches.
- Proprietary graphics drivers, including nvidia, are not supported. Please use the open source equivalents, such as nouveau, if you would like to use dwl.
- Report patch issues to their respective authors.
- type: input
id: dwl_version
attributes:
label: 'dwl version:'
placeholder: '`dwl -v`'
validations:
required: true
- type: input
id: wlroots_version
attributes:
label: 'wlroots version:'
validations:
required: true
- type: input
id: distro
attributes:
label: What distro (and version) are you using?
validations:
required: false
- type: textarea
attributes:
label: Description
value: |
The steps you took to reproduce the problem.
validations:
required: false
- type: textarea
id: debug_log
attributes:
label: Debug Log
value: |
Run `dwl -d 2> ~/dwl.log` from a TTY and attach the **full** (do not truncate it) file here, or upload it to a pastebin.
Please try to keep the reproduction as brief as possible and exit dwl.
validations:
required: false
- type: textarea
id: backtrace
attributes:
label: Stack Trace
value: |
- Only required if dwl crashes.
- If the lines mentioning dwl or wlroots have `??`. Please compile both dwl and wlroots from source (enabling debug symbols) and try to reproduce.
validations:
required: false
@@ -0,0 +1,9 @@
name: Enhancement idea
about: Suggest a feature or improvement
title:
labels:
- 'Kind/Feature'
body:
- type: textarea
attributes:
label: Description
-10
View File
@@ -1,10 +0,0 @@
---
name: Bug report
about: Something in dwl isn't working correctly
title: ''
labels: 'A: bug'
assignees: ''
---
@@ -1,10 +0,0 @@
---
name: Enhancement idea
about: Suggest a feature or improvement
title: ''
labels: 'A: enhancement'
assignees: ''
---
+194
View File
@@ -0,0 +1,194 @@
# Changelog
* [0.7](#0.7)
* [0.6](#0.6)
* [0.5](#0.5)
## 0.7
This version is just 0.6 with wlroots 0.18 compatibility.
### Added
* Add support for the alpha-modifier-v1 protocol ([wlroots!4616][wlroots!4616]).
* dwl now will survive GPU resets ([#601][601]).
[wlroots!4616]: https://gitlab.freedesktop.org/wlroots/wlroots/-/merge_requests/4616
[601]: https://codeberg.org/dwl/dwl/issues/601
### Contributors
Guido Cella
## 0.6
### Added
* Add `rootcolor` to change the default background color ([#544][544]).
* Implement the wlr-virtual-pointer-unstable-v1 protocol ([#574][574]).
* Implement the pointer-constraints and relative-pointer protocols ([#317][317])
* Implement the wlr-output-power-management protocol ([#599][599])
[544]: https://codeberg.org/dwl/dwl/pulls/544
[574]: https://codeberg.org/dwl/dwl/pulls/574
[317]: https://codeberg.org/dwl/dwl/issues/317
[599]: https://codeberg.org/dwl/dwl/issues/559
### Changed
* Keyboards are now managed through keyboard groups ([#549][549]).
* Only the first matched keybinding is executed.
* Allow toggling the layout before selecting a different one ([#570][570]).
* Fullscreen clients are now rendered above wlr_layer_surfaces in the top layer
([#609][609]).
* The default menu was changed from `bemenu-run` to `wmenu-run` ([#553][553]).
* The option `sloppyfocus` now replicates the dwm behavior ([#599][599]).
* Allow configure position of monitors with negative values. (-1, -1) is
used to auto-configure them ([#635][635]).
* dwl now kills the entire process group of `startup_cmd`
* The O_NONBLOCK flag is set for stdout.
[549]: https://codeberg.org/dwl/dwl/pulls/549
[570]: https://codeberg.org/dwl/dwl/pulls/570
[609]: https://codeberg.org/dwl/dwl/pulls/609
[553]: https://codeberg.org/dwl/dwl/issues/553
[599]: https://codeberg.org/dwl/dwl/pulls/599
[635]: https://codeberg.org/dwl/dwl/pulls/635
### Removed
* The SLOC limit is now removed ([#497][497]).
[497]: https://codeberg.org/dwl/dwl/pulls/497
### Fixed
* Clients not having the correct border color when mapping.
* Compliance with the xdg-decoration-unstable-v1 ([#546][546]).
* dwl no longer sends negative values in xdg_toplevel.configure events.
* Crashes with disabled monitors ([#472][472]).
[546]: https://codeberg.org/dwl/dwl/pulls/546
[472]: https://codeberg.org/dwl/dwl/issues/472
### Contributors
Ben Jargowsky
Benjamin Chausse
David Donahue
Devin J. Pohly
Dima Krasner
Emil Miler
Forrest Bushstone
Guido Cella
Peter Hofmann
Rutherther
Squibid
choc
fictitiousexistence
korei999
sewn
thanatos
## 0.5
### Added
* Allow configure x and y position of outputs ([#301][301])
* Implement repeatable keybindings ([#368][368])
* Print app id in printstatus() output ([#381][381])
* Display client count in monocle symbol ([#387][387])
* Export XCURSOR_SIZE to fix apps using an older version of Qt ([#425][425])
* Support for wp-fractional-scale-v1 (through wlr_scene: [wlroots!3511][wlroots!3511])
* dwl now sends `wl_surface.preferred_buffer_scale` (through wlr_scene: [wlroots!4269][wlroots!4269])
* Add support for xdg-shell v6 ([#465][465])
* Add support for wp-cursor-shape-v1 ([#444][444])
* Add desktop file ([#484][484])
* Add macro to easily configure colors ([#466][466])
* Color of urgent clients are now red ([#494][494])
* New flag `-d` and option `log_level` to change the wlroots debug level
* Add CHANGELOG.md ([#501][501])
[301]: https://github.com/djpohly/dwl/pull/301
[368]: https://github.com/djpohly/dwl/pull/368
[381]: https://github.com/djpohly/dwl/pull/381
[387]: https://github.com/djpohly/dwl/issues/387
[425]: https://github.com/djpohly/dwl/pull/425
[wlroots!4269]: https://gitlab.freedesktop.org/wlroots/wlroots/-/merge_requests/4269
[wlroots!3511]: https://gitlab.freedesktop.org/wlroots/wlroots/-/merge_requests/3511
[465]: https://github.com/djpohly/dwl/pull/465
[444]: https://github.com/djpohly/dwl/pull/444
[484]: https://github.com/djpohly/dwl/pull/484
[466]: https://github.com/djpohly/dwl/issues/466
[494]: https://github.com/djpohly/dwl/pull/494
[501]: https://github.com/djpohly/dwl/pull/501
### Changed
* Replace `tags` with `TAGCOUNT` in config.def.h ([#403][403])
* Pop ups are now destroyed when focusing another client ([#408][408])
* dwl does not longer respect size hints, instead clip windows if they are
larger than they should be ([#455][455])
* The version of wlr-layer-shell-unstable-v1 was lowered to 3 (from 4)
* Use the same border color as dwm ([#494][494])
[403]: https://github.com/djpohly/dwl/pull/403
[408]: https://github.com/djpohly/dwl/pull/409
[455]: https://github.com/djpohly/dwl/pull/455
[494]: https://github.com/djpohly/dwl/pull/494
### Removed
* Remove unused `rootcolor` option ([#401][401])
* Remove support for wlr-input-inhibitor-unstable-v1 ([#430][430])
* Remove support for KDE idle protocol ([#431][431])
[401]: https://github.com/djpohly/dwl/pull/401
[430]: https://github.com/djpohly/dwl/pull/430
[431]: https://github.com/djpohly/dwl/pull/431
### Fixed
* Fix crash when creating a layer surface with all outputs disabled
([#421][421])
* Fix other clients being shown as focused if the focused client have pop ups
open ([#408][408])
* Resize fullscreen clients when updating monitor mode
* dwl no longer crash at exit like sometimes did
* Fullscreen background appearing above clients ([#487][487])
* Fix a segfault when user provides invalid xkb_rules ([#518][518])
[421]: https://github.com/djpohly/dwl/pull/421
[408]: https://github.com/djpohly/dwl/issues/408
[487]: https://github.com/djpohly/dwl/issues/487
[518]: https://github.com/djpohly/dwl/pull/518
### Contributors
* A Frederick Christensen
* Angelo Antony
* Ben Collerson
* Devin J. Pohly
* Forrest Bushstone
* gan-of-culture
* godalming123
* Job79
* link2xt
* Micah Gorrell
* Nikita Ivanov
* Palanix
* pino-desktop
* Weiseguy
* Yves Zoundi
+1 -1
View File
@@ -2,7 +2,7 @@ dwl - dwm for Wayland
Copyright © 2020 dwl team
See also the files LICENSE.tinywl and LICENSE.dwm.
See also the files LICENSE.tinywl, LICENSE.dwm and LICENSE.sway.
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
+19
View File
@@ -0,0 +1,19 @@
Copyright (c) 2016-2017 Drew DeVault
Permission is hereby granted, free of charge, to any person obtaining a copy of
this software and associated documentation files (the "Software"), to deal in
the Software without restriction, including without limitation the rights to
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
of the Software, and to permit persons to whom the Software is furnished to do
so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
+62 -47
View File
@@ -1,63 +1,78 @@
.POSIX:
.SUFFIXES:
include config.mk
CFLAGS += -I. -DWLR_USE_UNSTABLE -std=c99
# flags for compiling
DWLCPPFLAGS = -I. -DWLR_USE_UNSTABLE -D_POSIX_C_SOURCE=200809L \
-DVERSION=\"$(VERSION)\" $(XWAYLAND)
DWLDEVCFLAGS = -g -pedantic -Wall -Wextra -Wdeclaration-after-statement \
-Wno-unused-parameter -Wshadow -Wunused-macros -Werror=strict-prototypes \
-Werror=implicit -Werror=return-type -Werror=incompatible-pointer-types \
-Wfloat-conversion
WAYLAND_PROTOCOLS=$(shell pkg-config --variable=pkgdatadir wayland-protocols)
WAYLAND_SCANNER=$(shell pkg-config --variable=wayland_scanner wayland-scanner)
PKGS = wlroots wayland-server xcb xkbcommon libinput
CFLAGS += $(foreach p,$(PKGS),$(shell pkg-config --cflags $(p)))
LDLIBS += $(foreach p,$(PKGS),$(shell pkg-config --libs $(p)))
# CFLAGS / LDFLAGS
PKGS = wlroots-0.18 wayland-server xkbcommon libinput $(XLIBS)
DWLCFLAGS = `$(PKG_CONFIG) --cflags $(PKGS)` $(DWLCPPFLAGS) $(DWLDEVCFLAGS) $(CFLAGS)
LDLIBS = `$(PKG_CONFIG) --libs $(PKGS)` -lm $(LIBS)
all: dwl
clean:
rm -f dwl *.o *-protocol.h *-protocol.c
install: dwl
install -D dwl $(PREFIX)/bin/dwl
uninstall:
rm -f $(PREFIX)/bin/dwl
.PHONY: all clean install uninstall
dwl: dwl.o util.o
$(CC) dwl.o util.o $(DWLCFLAGS) $(LDFLAGS) $(LDLIBS) -o $@
dwl.o: dwl.c client.h config.h config.mk cursor-shape-v1-protocol.h \
pointer-constraints-unstable-v1-protocol.h wlr-layer-shell-unstable-v1-protocol.h \
wlr-output-power-management-unstable-v1-protocol.h xdg-shell-protocol.h
util.o: util.c util.h
# wayland-scanner is a tool which generates C headers and rigging for Wayland
# protocols, which are specified in XML. wlroots requires you to rig these up
# to your build system yourself and provide them in the include path.
WAYLAND_SCANNER = `$(PKG_CONFIG) --variable=wayland_scanner wayland-scanner`
WAYLAND_PROTOCOLS = `$(PKG_CONFIG) --variable=pkgdatadir wayland-protocols`
cursor-shape-v1-protocol.h:
$(WAYLAND_SCANNER) enum-header \
$(WAYLAND_PROTOCOLS)/staging/cursor-shape/cursor-shape-v1.xml $@
pointer-constraints-unstable-v1-protocol.h:
$(WAYLAND_SCANNER) enum-header \
$(WAYLAND_PROTOCOLS)/unstable/pointer-constraints/pointer-constraints-unstable-v1.xml $@
wlr-layer-shell-unstable-v1-protocol.h:
$(WAYLAND_SCANNER) enum-header \
protocols/wlr-layer-shell-unstable-v1.xml $@
wlr-output-power-management-unstable-v1-protocol.h:
$(WAYLAND_SCANNER) server-header \
protocols/wlr-output-power-management-unstable-v1.xml $@
xdg-shell-protocol.h:
$(WAYLAND_SCANNER) server-header \
$(WAYLAND_PROTOCOLS)/stable/xdg-shell/xdg-shell.xml $@
xdg-shell-protocol.c:
$(WAYLAND_SCANNER) private-code \
$(WAYLAND_PROTOCOLS)/stable/xdg-shell/xdg-shell.xml $@
xdg-shell-protocol.o: xdg-shell-protocol.h
wlr-layer-shell-unstable-v1-protocol.h:
$(WAYLAND_SCANNER) server-header \
protocols/wlr-layer-shell-unstable-v1.xml $@
wlr-layer-shell-unstable-v1-protocol.c:
$(WAYLAND_SCANNER) private-code \
protocols/wlr-layer-shell-unstable-v1.xml $@
wlr-layer-shell-unstable-v1-protocol.o: wlr-layer-shell-unstable-v1-protocol.h
idle-protocol.h:
$(WAYLAND_SCANNER) server-header \
protocols/idle.xml $@
idle-protocol.c:
$(WAYLAND_SCANNER) private-code \
protocols/idle.xml $@
idle-protocol.o: idle-protocol.h
config.h: | config.def.h
config.h:
cp config.def.h $@
clean:
rm -f dwl *.o *-protocol.h
dwl.o: config.mk config.h client.h xdg-shell-protocol.h wlr-layer-shell-unstable-v1-protocol.h idle-protocol.h
dist: clean
mkdir -p dwl-$(VERSION)
cp -R LICENSE* Makefile CHANGELOG.md README.md client.h config.def.h \
config.mk protocols dwl.1 dwl.c util.c util.h dwl.desktop \
dwl-$(VERSION)
tar -caf dwl-$(VERSION).tar.gz dwl-$(VERSION)
rm -rf dwl-$(VERSION)
dwl: xdg-shell-protocol.o wlr-layer-shell-unstable-v1-protocol.o idle-protocol.o
install: dwl
mkdir -p $(DESTDIR)$(PREFIX)/bin
cp -f dwl $(DESTDIR)$(PREFIX)/bin
chmod 755 $(DESTDIR)$(PREFIX)/bin/dwl
mkdir -p $(DESTDIR)$(MANDIR)/man1
cp -f dwl.1 $(DESTDIR)$(MANDIR)/man1
chmod 644 $(DESTDIR)$(MANDIR)/man1/dwl.1
mkdir -p $(DESTDIR)$(DATADIR)/wayland-sessions
cp -f dwl.desktop $(DESTDIR)$(DATADIR)/wayland-sessions/dwl.desktop
chmod 644 $(DESTDIR)$(DATADIR)/wayland-sessions/dwl.desktop
uninstall:
rm -f $(DESTDIR)$(PREFIX)/bin/dwl $(DESTDIR)$(MANDIR)/man1/dwl.1 \
$(DESTDIR)$(DATADIR)/wayland-sessions/dwl.desktop
.SUFFIXES: .c .o
.c.o:
$(CC) $(CPPFLAGS) $(DWLCFLAGS) -o $@ -c $<
+119 -30
View File
@@ -1,62 +1,124 @@
# dwl - dwm for Wayland
Join us on our [Discord server](https://discord.gg/jJxZnrGPWN)!
Join us on our IRC channel: [#dwl on Libera Chat]
Or on our [Discord server].
dwl is a compact, hackable compositor for Wayland based on [wlroots](https://github.com/swaywm/wlroots). It is intended to fill the same space in the Wayland world that dwm does in X11, primarily in terms of philosophy, and secondarily in terms of functionality. Like dwm, dwl is:
dwl is a compact, hackable compositor for [Wayland] based on [wlroots]. It is
intended to fill the same space in the Wayland world that dwm does in X11,
primarily in terms of functionality, and secondarily in terms of philosophy.
Like dwm, dwl is:
- Easy to understand, hack on, and extend with patches
- One C source file (or a very small number) configurable via `config.h`
- Limited to 2000 SLOC to promote hackability
- Tied to as few external dependencies as possible
dwl is not meant to provide every feature under the sun. Instead, like dwm, it sticks to features which are necessary, simple, and straightforward to implement given the base on which it is built. Implemented default features are:
dwl is not meant to provide every feature under the sun. Instead, like dwm, it
sticks to features which are necessary, simple, and straightforward to implement
given the base on which it is built. Implemented default features are:
- Any features provided by dwm/Xlib: simple window borders, tags, keybindings, client rules, mouse move/resize. Providing a built-in status bar is an exception to this goal, to avoid dependencies on font rendering and/or drawing libraries when an external bar could work well.
- Any features provided by dwm/Xlib: simple window borders, tags, keybindings,
client rules, mouse move/resize. Providing a built-in status bar is an
exception to this goal, to avoid dependencies on font rendering and/or
drawing libraries when an external bar could work well.
- Configurable multi-monitor layout support, including position and rotation
- Configurable HiDPI/multi-DPI support
- Idle-inhibit protocol which lets applications such as mpv disable idle
monitoring
- Provide information to external status bars via stdout/stdin
- Urgency hints via xdg-activate protocol
- Support screen lockers via ext-session-lock-v1 protocol
- Various Wayland protocols
- XWayland support as provided by wlroots (can be enabled in `config.mk`)
- Zero flickering - Wayland users naturally expect that "every frame is perfect"
- Layer shell popups (used by Waybar)
- Damage tracking provided by scenegraph API
Given the Wayland architecture, dwl has to implement features from dwm **and**
the xorg-server. Because of this, it is impossible to maintain the original
project goal of 2000 SLOC and have a reasonably complete compositor with
features comparable to dwm. However, this does not mean that the code will grow
indiscriminately. We will try to keep the code as small as possible.
Features under consideration (possibly as patches) are:
- Protocols made trivial by wlroots
- Implement the input-inhibitor protocol to support screen lockers
- Implement the idle-inhibit protocol which lets applications such as mpv disable idle monitoring
- Layer shell popups (used by Waybar)
- Basic yes/no damage tracking to avoid needless redraws
- More in-depth damage region tracking ([which may improve power usage](https://mozillagfx.wordpress.com/2019/10/22/dramatically-reduced-power-usage-in-firefox-70-on-macos-with-core-animation/))
- Implement the text-input and input-method protocols to support IME once ibus implements input-method v2 (see https://github.com/ibus/ibus/pull/2256 and https://github.com/djpohly/dwl/pull/12)
- Implement the text-input and input-method protocols to support IME once ibus
implements input-method v2 (see https://github.com/ibus/ibus/pull/2256 and
https://codeberg.org/dwl/dwl/pulls/235)
Feature *non-goals* for the main codebase include:
- Client-side decoration (any more than is necessary to tell the clients not to)
- Client-initiated window management, such as move, resize, and close, which can be done through the compositor
- Client-initiated window management, such as move, resize, and close, which can
be done through the compositor
- Animations and visual effects
## Building dwl
dwl has only two dependencies: wlroots and wayland-protocols. Simply install these (and their `-devel` versions if your distro has separate development packages) and run `make`. If you wish to build against a Git version of wlroots, check out the [wlroots-next branch](https://github.com/djpohly/dwl/tree/wlroots-next).
dwl has the following dependencies:
```
libinput
wayland
wlroots (compiled with the libinput backend)
xkbcommon
wayland-protocols (compile-time only)
pkg-config (compile-time only)
```
If you enable X11 support:
```
libxcb
libxcb-wm
wlroots (compiled with X11 support)
Xwayland (runtime only)
```
To enable XWayland, you should also install xorg-xwayland and uncomment its flag in `config.mk`.
Simply install these (and their `-devel` versions if your distro has separate
development packages) and run `make`. If you wish to build against a Git
version of wlroots, check out the [wlroots-next branch].
To enable XWayland, you should uncomment its flags in `config.mk`.
## Configuration
All configuration is done by editing `config.h` and recompiling, in the same manner as dwm. There is no way to separately restart the window manager in Wayland without restarting the entire display server, so any changes will take effect the next time dwl is executed.
All configuration is done by editing `config.h` and recompiling, in the same
manner as dwm. There is no way to separately restart the window manager in
Wayland without restarting the entire display server, so any changes will take
effect the next time dwl is executed.
As in the dwm community, we encourage users to share patches they have created. Check out the [patches page on our wiki](https://github.com/djpohly/dwl/wiki/Patches)!
As in the dwm community, we encourage users to share patches they have created.
Check out the dwl [patches repository]!
## Running dwl
dwl can be run on any of the backends supported by wlroots. This means you can run it as a separate window inside either an X11 or Wayland session, as well as directly from a VT console. Depending on your distro's setup, you may need to add your user to the `video` and `input` groups before you can run dwl on a VT.
dwl can be run on any of the backends supported by wlroots. This means you can
run it as a separate window inside either an X11 or Wayland session, as well
as directly from a VT console. Depending on your distro's setup, you may need
to add your user to the `video` and `input` groups before you can run dwl on
a VT. If you are using `elogind` or `systemd-logind` you need to install
polkit; otherwise you need to add yourself in the `seat` group and
enable/start the seatd daemon.
When dwl is run with no arguments, it will launch the server and begin handling any shortcuts configured in `config.h`. There is no status bar or other decoration initially; these are instead clients that can be run within the Wayland session.
When dwl is run with no arguments, it will launch the server and begin handling
any shortcuts configured in `config.h`. There is no status bar or other
decoration initially; these are instead clients that can be run within
the Wayland session.
Do note that the background color is black.
If you would like to run a script or command automatically at startup, you can specify the command using the `-s` option. This command will be executed as a shell command using `/bin/sh -c`. It serves a similar function to `.xinitrc`, but differs in that the display server will not shut down when this process terminates. Instead, dwl will send this process a SIGTERM at shutdown and wait for it to terminate (if it hasn't already). This makes it ideal for execing into a user service manager like [s6](https://skarnet.org/software/s6/), [anopa](https://jjacky.com/anopa/), [runit](http://smarden.org/runit/faq.html#userservices), or [`systemd --user`](https://wiki.archlinux.org/title/Systemd/User).
If you would like to run a script or command automatically at startup, you can
specify the command using the `-s` option. This command will be executed as a
shell command using `/bin/sh -c`. It serves a similar function to `.xinitrc`,
but differs in that the display server will not shut down when this process
terminates. Instead, dwl will send this process a SIGTERM at shutdown and wait
for it to terminate (if it hasn't already). This makes it ideal for execing into
a user service manager like [s6], [anopa], [runit], [dinit], or [`systemd --user`].
Note: The `-s` command is run as a *child process* of dwl, which means that it does not have the ability to affect the environment of dwl or of any processes that it spawns. If you need to set environment variables that affect the entire dwl session, these must be set prior to running dwl. For example, Wayland requires a valid `XDG_RUNTIME_DIR`, which is usually set up by a session manager such as `elogind` or `systemd-logind`. If your system doesn't do this automatically, you will need to configure it prior to launching `dwl`, e.g.:
Note: The `-s` command is run as a *child process* of dwl, which means that it
does not have the ability to affect the environment of dwl or of any processes
that it spawns. If you need to set environment variables that affect the entire
dwl session, these must be set prior to running dwl. For example, Wayland
requires a valid `XDG_RUNTIME_DIR`, which is usually set up by a session manager
such as `elogind` or `systemd-logind`. If your system doesn't do this
automatically, you will need to configure it prior to launching `dwl`, e.g.:
export XDG_RUNTIME_DIR=/tmp/xdg-runtime-$(id -u)
mkdir -p $XDG_RUNTIME_DIR
@@ -64,28 +126,55 @@ Note: The `-s` command is run as a *child process* of dwl, which means that it d
### Status information
Information about selected layouts, current window title, and selected/occupied/urgent tags is written to the stdin of the `-s` command (see the `printstatus()` function for details). This information can be used to populate an external status bar with a script that parses the information. Failing to read this information will cause dwl to block, so if you do want to run a startup command that does not consume the status information, you can close standard input with the `<&-` shell redirection, for example:
Information about selected layouts, current window title, app-id, and
selected/occupied/urgent tags is written to the stdin of the `-s` command (see
the `printstatus()` function for details). This information can be used to
populate an external status bar with a script that parses the information.
Failing to read this information will cause dwl to block, so if you do want to
run a startup command that does not consume the status information, you can
close standard input with the `<&-` shell redirection, for example:
dwl -s 'foot --server <&-'
If your startup command is a shell script, you can achieve the same inside the script with the line
If your startup command is a shell script, you can achieve the same inside the
script with the line
exec <&-
To get a list of status bars that work with dwl consult our [wiki].
## Replacements for X applications
You can find a [list of Wayland applications on the sway wiki](https://github.com/swaywm/sway/wiki/i3-Migration-Guide).
## IRC channel
dwl's IRC channel is #dwl on irc.freenode.net.
You can find a [list of useful resources on our wiki].
## Acknowledgements
dwl began by extending the TinyWL example provided (CC0) by the sway/wlroots developers. This was made possible in many cases by looking at how sway accomplished something, then trying to do the same in as suckless a way as possible.
dwl began by extending the TinyWL example provided (CC0) by the sway/wlroots
developers. This was made possible in many cases by looking at how sway
accomplished something, then trying to do the same in as suckless a way as
possible.
Many thanks to suckless.org and the dwm developers and community for the inspiration, and to the various contributors to the project, including:
Many thanks to suckless.org and the dwm developers and community for the
inspiration, and to the various contributors to the project, including:
- **Devin J. Pohly for creating and nurturing the fledgling project**
- Alexander Courtis for the XWayland implementation
- Guido Cella for the layer-shell protocol implementation, patch maintenance, and for helping to keep the project running
- Guido Cella for the layer-shell protocol implementation, patch maintenance,
and for helping to keep the project running
- Stivvo for output management and fullscreen support, and patch maintenance
[Discord server]: https://discord.gg/jJxZnrGPWN
[#dwl on Libera Chat]: https://web.libera.chat/?channels=#dwl
[Wayland]: https://wayland.freedesktop.org/
[wlroots]: https://gitlab.freedesktop.org/wlroots/wlroots/
[wlroots-next branch]: https://codeberg.org/dwl/dwl/src/branch/wlroots-next
[patches repository]: https://codeberg.org/dwl/dwl-patches
[s6]: https://skarnet.org/software/s6/
[anopa]: https://jjacky.com/anopa/
[runit]: http://smarden.org/runit/faq.html#userservices
[dinit]: https://davmac.org/projects/dinit/
[`systemd --user`]: https://wiki.archlinux.org/title/Systemd/User
[wiki]: https://codeberg.org/dwl/dwl/wiki/Home#compatible-status-bars
[list of useful resources on our wiki]:
https://codeberg.org/dwl/dwl/wiki/Home#migrating-from-x
+268 -32
View File
@@ -10,10 +10,9 @@ static inline int
client_is_x11(Client *c)
{
#ifdef XWAYLAND
return c->type == X11Managed || c->type == X11Unmanaged;
#else
return 0;
return c->type == X11;
#endif
return 0;
}
static inline struct wlr_surface *
@@ -26,31 +25,100 @@ client_surface(Client *c)
return c->surface.xdg->surface;
}
static inline int
toplevel_from_wlr_surface(struct wlr_surface *s, Client **pc, LayerSurface **pl)
{
struct wlr_xdg_surface *xdg_surface, *tmp_xdg_surface;
struct wlr_surface *root_surface;
struct wlr_layer_surface_v1 *layer_surface;
Client *c = NULL;
LayerSurface *l = NULL;
int type = -1;
#ifdef XWAYLAND
struct wlr_xwayland_surface *xsurface;
#endif
if (!s)
return -1;
root_surface = wlr_surface_get_root_surface(s);
#ifdef XWAYLAND
if ((xsurface = wlr_xwayland_surface_try_from_wlr_surface(root_surface))) {
c = xsurface->data;
type = c->type;
goto end;
}
#endif
if ((layer_surface = wlr_layer_surface_v1_try_from_wlr_surface(root_surface))) {
l = layer_surface->data;
type = LayerShell;
goto end;
}
xdg_surface = wlr_xdg_surface_try_from_wlr_surface(root_surface);
while (xdg_surface) {
tmp_xdg_surface = NULL;
switch (xdg_surface->role) {
case WLR_XDG_SURFACE_ROLE_POPUP:
if (!xdg_surface->popup || !xdg_surface->popup->parent)
return -1;
tmp_xdg_surface = wlr_xdg_surface_try_from_wlr_surface(xdg_surface->popup->parent);
if (!tmp_xdg_surface)
return toplevel_from_wlr_surface(xdg_surface->popup->parent, pc, pl);
xdg_surface = tmp_xdg_surface;
break;
case WLR_XDG_SURFACE_ROLE_TOPLEVEL:
c = xdg_surface->data;
type = c->type;
goto end;
case WLR_XDG_SURFACE_ROLE_NONE:
return -1;
}
}
end:
if (pl)
*pl = l;
if (pc)
*pc = c;
return type;
}
/* The others */
static inline void
client_activate_surface(struct wlr_surface *s, int activated)
{
struct wlr_xdg_toplevel *toplevel;
#ifdef XWAYLAND
if (wlr_surface_is_xwayland_surface(s)) {
wlr_xwayland_surface_activate(
wlr_xwayland_surface_from_wlr_surface(s), activated);
struct wlr_xwayland_surface *xsurface;
if ((xsurface = wlr_xwayland_surface_try_from_wlr_surface(s))) {
wlr_xwayland_surface_activate(xsurface, activated);
return;
}
#endif
if (wlr_surface_is_xdg_surface(s))
wlr_xdg_toplevel_set_activated(
wlr_xdg_surface_from_wlr_surface(s), activated);
if ((toplevel = wlr_xdg_toplevel_try_from_wlr_surface(s)))
wlr_xdg_toplevel_set_activated(toplevel, activated);
}
static inline void
client_for_each_surface(Client *c, wlr_surface_iterator_func_t fn, void *data)
static inline uint32_t
client_set_bounds(Client *c, int32_t width, int32_t height)
{
wlr_surface_for_each_surface(client_surface(c), fn, data);
#ifdef XWAYLAND
if (client_is_x11(c))
return;
return 0;
#endif
wlr_xdg_surface_for_each_popup_surface(c->surface.xdg, fn, data);
if (wl_resource_get_version(c->surface.xdg->toplevel->resource) >=
XDG_TOPLEVEL_CONFIGURE_BOUNDS_SINCE_VERSION && width >= 0 && height >= 0
&& (c->bounds.width != width || c->bounds.height != height)) {
c->bounds.width = width;
c->bounds.height = height;
return wlr_xdg_toplevel_set_bounds(c->surface.xdg->toplevel, width, height);
}
return 0;
}
static inline const char *
@@ -63,6 +131,27 @@ client_get_appid(Client *c)
return c->surface.xdg->toplevel->app_id;
}
static inline void
client_get_clip(Client *c, struct wlr_box *clip)
{
struct wlr_box xdg_geom = {0};
*clip = (struct wlr_box){
.x = 0,
.y = 0,
.width = c->geom.width - c->bw,
.height = c->geom.height - c->bw,
};
#ifdef XWAYLAND
if (client_is_x11(c))
return;
#endif
wlr_xdg_surface_get_geometry(c->surface.xdg, &xdg_geom);
clip->x = xdg_geom.x;
clip->y = xdg_geom.y;
}
static inline void
client_get_geometry(Client *c, struct wlr_box *geom)
{
@@ -78,6 +167,34 @@ client_get_geometry(Client *c, struct wlr_box *geom)
wlr_xdg_surface_get_geometry(c->surface.xdg, geom);
}
static inline Client *
client_get_parent(Client *c)
{
Client *p = NULL;
#ifdef XWAYLAND
if (client_is_x11(c)) {
if (c->surface.xwayland->parent)
toplevel_from_wlr_surface(c->surface.xwayland->parent->surface, &p, NULL);
return p;
}
#endif
if (c->surface.xdg->toplevel->parent)
toplevel_from_wlr_surface(c->surface.xdg->toplevel->parent->base->surface, &p, NULL);
return p;
}
static inline int
client_has_children(Client *c)
{
#ifdef XWAYLAND
if (client_is_x11(c))
return !wl_list_empty(&c->surface.xwayland->children);
#endif
/* surface.xdg->link is never empty because it always contains at least the
* surface itself. */
return wl_list_length(&c->surface.xdg->link) > 1;
}
static inline const char *
client_get_title(Client *c)
{
@@ -91,15 +208,76 @@ client_get_title(Client *c)
static inline int
client_is_float_type(Client *c)
{
struct wlr_xdg_toplevel *toplevel;
struct wlr_xdg_toplevel_state state;
#ifdef XWAYLAND
if (client_is_x11(c)) {
struct wlr_xwayland_surface *surface = c->surface.xwayland;
xcb_size_hints_t *size_hints = surface->size_hints;
size_t i;
if (surface->modal)
return 1;
for (i = 0; i < surface->window_type_len; i++)
if (surface->window_type[i] == netatom[NetWMWindowTypeDialog]
|| surface->window_type[i] == netatom[NetWMWindowTypeSplash]
|| surface->window_type[i] == netatom[NetWMWindowTypeToolbar]
|| surface->window_type[i] == netatom[NetWMWindowTypeUtility])
return 1;
return size_hints && size_hints->min_width > 0 && size_hints->min_height > 0
&& (size_hints->max_width == size_hints->min_width
|| size_hints->max_height == size_hints->min_height);
}
#endif
toplevel = c->surface.xdg->toplevel;
state = toplevel->current;
return toplevel->parent || (state.min_width != 0 && state.min_height != 0
&& (state.min_width == state.max_width
|| state.min_height == state.max_height));
}
static inline int
client_is_rendered_on_mon(Client *c, Monitor *m)
{
/* This is needed for when you don't want to check formal assignment,
* but rather actual displaying of the pixels.
* Usually VISIBLEON suffices and is also faster. */
struct wlr_surface_output *s;
int unused_lx, unused_ly;
if (!wlr_scene_node_coords(&c->scene->node, &unused_lx, &unused_ly))
return 0;
wl_list_for_each(s, &client_surface(c)->current_outputs, link)
if (s->output == m->wlr_output)
return 1;
return 0;
}
static inline int
client_is_stopped(Client *c)
{
int pid;
siginfo_t in = {0};
#ifdef XWAYLAND
if (client_is_x11(c))
for (size_t i = 0; i < c->surface.xwayland->window_type_len; i++)
if (c->surface.xwayland->window_type[i] == netatom[NetWMWindowTypeDialog] ||
c->surface.xwayland->window_type[i] == netatom[NetWMWindowTypeSplash] ||
c->surface.xwayland->window_type[i] == netatom[NetWMWindowTypeToolbar] ||
c->surface.xwayland->window_type[i] == netatom[NetWMWindowTypeUtility])
return 1;
return 0;
#endif
wl_client_get_credentials(c->surface.xdg->client->client, &pid, NULL, NULL);
if (waitid(P_PID, pid, &in, WNOHANG|WCONTINUED|WSTOPPED|WNOWAIT) < 0) {
/* This process is not our child process, while is very unluckely that
* it is stopped, in order to do not skip frames assume that it is. */
if (errno == ECHILD)
return 1;
} else if (in.si_pid) {
if (in.si_code == CLD_STOPPED || in.si_code == CLD_TRAPPED)
return 1;
if (in.si_code == CLD_CONTINUED)
return 0;
}
return 0;
}
@@ -107,11 +285,33 @@ static inline int
client_is_unmanaged(Client *c)
{
#ifdef XWAYLAND
return c->type == X11Unmanaged;
if (client_is_x11(c))
return c->surface.xwayland->override_redirect;
#endif
return 0;
}
static inline void
client_notify_enter(struct wlr_surface *s, struct wlr_keyboard *kb)
{
if (kb)
wlr_seat_keyboard_notify_enter(seat, s, kb->keycodes,
kb->num_keycodes, &kb->modifiers);
else
wlr_seat_keyboard_notify_enter(seat, s, NULL, 0, NULL);
}
static inline void
client_restack_surface(Client *c)
{
#ifdef XWAYLAND
if (client_is_x11(c))
wlr_xwayland_surface_restack(c->surface.xwayland, NULL,
XCB_STACK_MODE_ABOVE);
#endif
return;
}
static inline void
client_send_close(Client *c)
{
@@ -121,7 +321,15 @@ client_send_close(Client *c)
return;
}
#endif
wlr_xdg_toplevel_send_close(c->surface.xdg);
wlr_xdg_toplevel_send_close(c->surface.xdg->toplevel);
}
static inline void
client_set_border_color(Client *c, const float color[static 4])
{
int i;
for (i = 0; i < 4; i++)
wlr_scene_rect_set_color(c->border[i], color);
}
static inline void
@@ -133,7 +341,7 @@ client_set_fullscreen(Client *c, int fullscreen)
return;
}
#endif
wlr_xdg_toplevel_set_fullscreen(c->surface.xdg, fullscreen);
wlr_xdg_toplevel_set_fullscreen(c->surface.xdg->toplevel, fullscreen);
}
static inline uint32_t
@@ -142,11 +350,14 @@ client_set_size(Client *c, uint32_t width, uint32_t height)
#ifdef XWAYLAND
if (client_is_x11(c)) {
wlr_xwayland_surface_configure(c->surface.xwayland,
c->geom.x, c->geom.y, width, height);
c->geom.x + c->bw, c->geom.y + c->bw, width, height);
return 0;
}
#endif
return wlr_xdg_toplevel_set_size(c->surface.xdg, width, height);
if ((int32_t)width == c->surface.xdg->toplevel->current.width
&& (int32_t)height == c->surface.xdg->toplevel->current.height)
return 0;
return wlr_xdg_toplevel_set_size(c->surface.xdg->toplevel, (int32_t)width, (int32_t)height);
}
static inline void
@@ -156,17 +367,42 @@ client_set_tiled(Client *c, uint32_t edges)
if (client_is_x11(c))
return;
#endif
wlr_xdg_toplevel_set_tiled(c->surface.xdg, WLR_EDGE_TOP |
WLR_EDGE_BOTTOM | WLR_EDGE_LEFT | WLR_EDGE_RIGHT);
if (wl_resource_get_version(c->surface.xdg->toplevel->resource)
>= XDG_TOPLEVEL_STATE_TILED_RIGHT_SINCE_VERSION) {
wlr_xdg_toplevel_set_tiled(c->surface.xdg->toplevel, edges);
} else {
wlr_xdg_toplevel_set_maximized(c->surface.xdg->toplevel, edges != WLR_EDGE_NONE);
}
}
static inline struct wlr_surface *
client_surface_at(Client *c, double cx, double cy, double *sx, double *sy)
static inline void
client_set_suspended(Client *c, int suspended)
{
#ifdef XWAYLAND
if (client_is_x11(c))
return wlr_surface_surface_at(c->surface.xwayland->surface,
cx, cy, sx, sy);
return;
#endif
return wlr_xdg_surface_surface_at(c->surface.xdg, cx, cy, sx, sy);
wlr_xdg_toplevel_set_suspended(c->surface.xdg->toplevel, suspended);
}
static inline int
client_wants_focus(Client *c)
{
#ifdef XWAYLAND
return client_is_unmanaged(c)
&& wlr_xwayland_or_surface_wants_focus(c->surface.xwayland)
&& wlr_xwayland_icccm_input_model(c->surface.xwayland) != WLR_ICCCM_INPUT_MODEL_NONE;
#endif
return 0;
}
static inline int
client_wants_fullscreen(Client *c)
{
#ifdef XWAYLAND
if (client_is_x11(c))
return c->surface.xwayland->fullscreen;
#endif
return c->surface.xdg->toplevel->requested.fullscreen;
}
+84 -24
View File
@@ -1,19 +1,31 @@
/* Taken from https://github.com/djpohly/dwl/issues/466 */
#define COLOR(hex) { ((hex >> 24) & 0xFF) / 255.0f, \
((hex >> 16) & 0xFF) / 255.0f, \
((hex >> 8) & 0xFF) / 255.0f, \
(hex & 0xFF) / 255.0f }
/* appearance */
static const int sloppyfocus = 1; /* focus follows mouse */
static const unsigned int borderpx = 1; /* border pixel of windows */
static const float rootcolor[] = {0.3, 0.3, 0.3, 1.0};
static const float bordercolor[] = {0.5, 0.5, 0.5, 1.0};
static const float focuscolor[] = {1.0, 0.0, 0.0, 1.0};
static const int sloppyfocus = 1; /* focus follows mouse */
static const int bypass_surface_visibility = 0; /* 1 means idle inhibitors will disable idle tracking even if it's surface isn't visible */
static const unsigned int borderpx = 1; /* border pixel of windows */
static const float rootcolor[] = COLOR(0x222222ff);
static const float bordercolor[] = COLOR(0x444444ff);
static const float focuscolor[] = COLOR(0x005577ff);
static const float urgentcolor[] = COLOR(0xff0000ff);
/* This conforms to the xdg-protocol. Set the alpha to zero to restore the old behavior */
static const float fullscreen_bg[] = {0.1f, 0.1f, 0.1f, 1.0f}; /* You can also use glsl colors */
/* tagging */
static const char *tags[] = { "1", "2", "3", "4", "5", "6", "7", "8", "9" };
/* tagging - TAGCOUNT must be no greater than 31 */
#define TAGCOUNT (9)
/* logging */
static int log_level = WLR_ERROR;
/* NOTE: ALWAYS keep a rule declared even if you don't use rules (e.g leave at least one example) */
static const Rule rules[] = {
/* app_id title tags mask isfloating monitor */
/* examples:
{ "Gimp", NULL, 0, 1, -1 },
{ "firefox", NULL, 1 << 8, 0, -1 },
*/
/* app_id title tags mask isfloating monitor */
/* examples: */
{ "Gimp_EXAMPLE", NULL, 0, 1, -1 }, /* Start on currently visible tags floating, not tiled */
{ "firefox_EXAMPLE", NULL, 1 << 8, 0, -1 }, /* Start on ONLY tag "9" */
};
/* layout(s) */
@@ -24,16 +36,19 @@ static const Layout layouts[] = {
{ "[M]", monocle },
};
/* monitors
* The order in which monitors are defined determines their position.
* Non-configured monitors are always added to the left. */
/* monitors */
/* (x=-1, y=-1) is reserved as an "autoconfigure" monitor position indicator
* WARNING: negative values other than (-1, -1) cause problems with Xwayland clients
* https://gitlab.freedesktop.org/xorg/xserver/-/issues/899
*/
/* NOTE: ALWAYS add a fallback rule, even if you are completely sure it won't be used */
static const MonitorRule monrules[] = {
/* name mfact nmaster scale layout rotate/reflect x y */
/* name mfact nmaster scale layout rotate/reflect x y */
/* example of a HiDPI laptop monitor:
{ "eDP-1", 0.5, 1, 2, &layouts[0], WL_OUTPUT_TRANSFORM_NORMAL, 0, 0 },
{ "eDP-1", 0.5f, 1, 2, &layouts[0], WL_OUTPUT_TRANSFORM_NORMAL, -1, -1 },
*/
/* defaults */
{ NULL, 0.55, 1, 1, &layouts[0], WL_OUTPUT_TRANSFORM_NORMAL, 0, 0 },
{ NULL, 0.55f, 1, 1, &layouts[0], WL_OUTPUT_TRANSFORM_NORMAL, -1, -1 },
};
/* keyboard */
@@ -42,6 +57,7 @@ static const struct xkb_rule_names xkb_rules = {
/* example:
.options = "ctrl:nocaps",
*/
.options = NULL,
};
static const int repeat_rate = 25;
@@ -49,9 +65,50 @@ static const int repeat_delay = 600;
/* Trackpad */
static const int tap_to_click = 1;
static const int tap_and_drag = 1;
static const int drag_lock = 1;
static const int natural_scrolling = 0;
static const int disable_while_typing = 1;
static const int left_handed = 0;
static const int middle_button_emulation = 0;
/* You can choose between:
LIBINPUT_CONFIG_SCROLL_NO_SCROLL
LIBINPUT_CONFIG_SCROLL_2FG
LIBINPUT_CONFIG_SCROLL_EDGE
LIBINPUT_CONFIG_SCROLL_ON_BUTTON_DOWN
*/
static const enum libinput_config_scroll_method scroll_method = LIBINPUT_CONFIG_SCROLL_2FG;
/* You can choose between:
LIBINPUT_CONFIG_CLICK_METHOD_NONE
LIBINPUT_CONFIG_CLICK_METHOD_BUTTON_AREAS
LIBINPUT_CONFIG_CLICK_METHOD_CLICKFINGER
*/
static const enum libinput_config_click_method click_method = LIBINPUT_CONFIG_CLICK_METHOD_BUTTON_AREAS;
/* You can choose between:
LIBINPUT_CONFIG_SEND_EVENTS_ENABLED
LIBINPUT_CONFIG_SEND_EVENTS_DISABLED
LIBINPUT_CONFIG_SEND_EVENTS_DISABLED_ON_EXTERNAL_MOUSE
*/
static const uint32_t send_events_mode = LIBINPUT_CONFIG_SEND_EVENTS_ENABLED;
/* You can choose between:
LIBINPUT_CONFIG_ACCEL_PROFILE_FLAT
LIBINPUT_CONFIG_ACCEL_PROFILE_ADAPTIVE
*/
static const enum libinput_config_accel_profile accel_profile = LIBINPUT_CONFIG_ACCEL_PROFILE_ADAPTIVE;
static const double accel_speed = 0.0;
/* You can choose between:
LIBINPUT_CONFIG_TAP_MAP_LRM -- 1/2/3 finger tap maps to left/right/middle
LIBINPUT_CONFIG_TAP_MAP_LMR -- 1/2/3 finger tap maps to left/middle/right
*/
static const enum libinput_config_tap_button_map button_map = LIBINPUT_CONFIG_TAP_MAP_LRM;
/* If you want to use the windows key for MODKEY, use WLR_MODIFIER_LOGO */
#define MODKEY WLR_MODIFIER_ALT
#define TAGKEYS(KEY,SKEY,TAG) \
{ MODKEY, KEY, view, {.ui = 1 << TAG} }, \
{ MODKEY|WLR_MODIFIER_CTRL, KEY, toggleview, {.ui = 1 << TAG} }, \
@@ -62,8 +119,8 @@ static const int natural_scrolling = 0;
#define SHCMD(cmd) { .v = (const char*[]){ "/bin/sh", "-c", cmd, NULL } }
/* commands */
static const char *termcmd[] = { "alacritty", NULL };
static const char *menucmd[] = { "bemenu-run", NULL };
static const char *termcmd[] = { "foot", NULL };
static const char *menucmd[] = { "wmenu-run", NULL };
static const Key keys[] = {
/* Note that Shift changes certain key codes: c -> C, 2 -> at, etc. */
@@ -74,8 +131,8 @@ static const Key keys[] = {
{ MODKEY, XKB_KEY_k, focusstack, {.i = -1} },
{ MODKEY, XKB_KEY_i, incnmaster, {.i = +1} },
{ MODKEY, XKB_KEY_d, incnmaster, {.i = -1} },
{ MODKEY, XKB_KEY_h, setmfact, {.f = -0.05} },
{ MODKEY, XKB_KEY_l, setmfact, {.f = +0.05} },
{ MODKEY, XKB_KEY_h, setmfact, {.f = -0.05f} },
{ MODKEY, XKB_KEY_l, setmfact, {.f = +0.05f} },
{ MODKEY, XKB_KEY_Return, zoom, {0} },
{ MODKEY, XKB_KEY_Tab, view, {0} },
{ MODKEY|WLR_MODIFIER_SHIFT, XKB_KEY_C, killclient, {0} },
@@ -84,7 +141,7 @@ static const Key keys[] = {
{ MODKEY, XKB_KEY_m, setlayout, {.v = &layouts[2]} },
{ MODKEY, XKB_KEY_space, setlayout, {0} },
{ MODKEY|WLR_MODIFIER_SHIFT, XKB_KEY_space, togglefloating, {0} },
{ MODKEY, XKB_KEY_e, togglefullscreen, {0} },
{ MODKEY, XKB_KEY_e, togglefullscreen, {0} },
{ MODKEY, XKB_KEY_0, view, {.ui = ~0} },
{ MODKEY|WLR_MODIFIER_SHIFT, XKB_KEY_parenright, tag, {.ui = ~0} },
{ MODKEY, XKB_KEY_comma, focusmon, {.i = WLR_DIRECTION_LEFT} },
@@ -96,7 +153,7 @@ static const Key keys[] = {
TAGKEYS( XKB_KEY_3, XKB_KEY_numbersign, 2),
TAGKEYS( XKB_KEY_4, XKB_KEY_dollar, 3),
TAGKEYS( XKB_KEY_5, XKB_KEY_percent, 4),
TAGKEYS( XKB_KEY_6, XKB_KEY_caret, 5),
TAGKEYS( XKB_KEY_6, XKB_KEY_asciicircum, 5),
TAGKEYS( XKB_KEY_7, XKB_KEY_ampersand, 6),
TAGKEYS( XKB_KEY_8, XKB_KEY_asterisk, 7),
TAGKEYS( XKB_KEY_9, XKB_KEY_parenleft, 8),
@@ -104,6 +161,9 @@ static const Key keys[] = {
/* Ctrl-Alt-Backspace and Ctrl-Alt-Fx used to be handled by X server */
{ WLR_MODIFIER_CTRL|WLR_MODIFIER_ALT,XKB_KEY_Terminate_Server, quit, {0} },
/* Ctrl-Alt-Fx is used to switch to another VT, if you don't know what a VT is
* do not remove them.
*/
#define CHVT(n) { WLR_MODIFIER_CTRL|WLR_MODIFIER_ALT,XKB_KEY_XF86Switch_VT_##n, chvt, {.ui = (n)} }
CHVT(1), CHVT(2), CHVT(3), CHVT(4), CHVT(5), CHVT(6),
CHVT(7), CHVT(8), CHVT(9), CHVT(10), CHVT(11), CHVT(12),
+13 -4
View File
@@ -1,8 +1,17 @@
_VERSION = 0.7-rc1
VERSION = `git describe --tags --dirty 2>/dev/null || echo $(_VERSION)`
PKG_CONFIG = pkg-config
# paths
PREFIX = /usr/local
MANDIR = $(PREFIX)/share/man
DATADIR = $(PREFIX)/share
# Default compile flags (overridable by environment)
CFLAGS ?= -g -Wall -Wextra -Werror -Wno-unused-parameter -Wno-sign-compare -Wno-unused-function -Wno-unused-variable -Wdeclaration-after-statement
XWAYLAND =
XLIBS =
# Uncomment to build XWayland support
#CFLAGS += -DXWAYLAND
#XWAYLAND = -DXWAYLAND
#XLIBS = xcb xcb-icccm
CC = gcc
+158
View File
@@ -0,0 +1,158 @@
.Dd January 8, 2021
.Dt DWL 1
.Os
.Sh NAME
.Nm dwl
.Nd dwm for Wayland
.Sh SYNOPSIS
.Nm
.Op Fl v
.Op Fl d
.Op Fl s Ar startup command
.Sh DESCRIPTION
.Nm
is a Wayland compositor based on wlroots.
It is intended to fill the same space in the Wayland world that
.Nm dwm
does for X11.
.Pp
When given the
.Fl v
option,
.Nm
writes its name and version to standard error and exits unsuccessfully.
.Pp
When given the
.Fl d
option,
.Nm
enables full wlroots logging, including debug information.
.Pp
When given the
.Fl s
option,
.Nm
starts a shell process running
.Ar command
when starting.
When stopping, it sends
.Dv SIGTERM
to the child process and waits for it to exit.
.Pp
Users are encouraged to customize
.Nm
by editing the sources, in particular
.Pa config.h .
The default key bindings are as follows:
.Bl -tag -width 20n -offset indent -compact
.It Mod-[1-9]
Show only all windows with a tag.
.It Mod-Ctrl-[1-9]
Show all windows with a tag.
.It Mod-Shift-[1-9]
Move window to a single tag.
.It Mod-Ctrl-Shift-[1-9]
Toggle tag for window.
.It Mod-p
Spawn
.Nm wmenu-run .
.It Mod-Shift-Return
Spawn
.Nm foot .
.It Mod-[jk]
Move focus down/up the stack.
.It Mod-[id]
Increase/decrease number of windows in master area.
.It Mod-[hl]
Decrease/increase master area.
.It Mod-Return
Move window on top of stack or switch top of stack with second window.
.It Mod-Tab
Show only all windows with previous tag.
.It Mod-Shift-c
Close window.
.It Mod-t
Switch to tabbed layout.
.It Mod-f
Switch to floating layout.
.It Mod-m
Switch to monocle layout.
.It Mod-Space
Switch to previous layout.
.It Mod-Shift-Space
Toggle floating state of window.
.It Mod-e
Toggle fullscreen state of window.
.It Mod-0
Show all windows.
.It Mod-Shift-0
Set all tags for window.
.It Mod-,
Move focus to previous monitor.
.It Mod-.
Move focus to next monitor.
.It Mod-Shift-,
Move window to previous monitor.
.It Mod-Shift-.
Move window to next monitor.
.It Mod-Shift-q
Quit
.Nm .
.El
These might differ depending on your keyboard layout.
.Sh ENVIRONMENT
These environment variables are used by
.Nm :
.Bl -tag -width XDG_RUNTIME_DIR
.It Ev XDG_RUNTIME_DIR
A directory where temporary user files, such as the Wayland socket,
are stored.
.It Ev XDG_CONFIG_DIR
A directory containing configuration of various programs and
libraries, including libxkbcommon.
.It Ev DISPLAY , WAYLAND_DISPLAY , WAYLAND_SOCKET
Tell how to connect to an underlying X11 or Wayland server.
.It Ev WLR_*
Various variables specific to wlroots.
.It Ev XKB_* , XLOCALEDIR , XCOMPOSEFILE
Various variables specific to libxkbcommon.
.It Ev XCURSOR_PATH
List of directories to search for XCursor themes in.
.It Ev HOME
A directory where there are always dear files there for you.
Waiting for you to clean them up.
.El
.Pp
These are set by
.Nm :
.Bl -tag -width WAYLAND_DISPLAY
.It Ev WAYLAND_DISPLAY
Tell how to connect to
.Nm .
.It Ev DISPLAY
If using
.Nm Xwayland ,
tell how to connect to the
.Nm Xwayland
server.
.El
.Sh EXAMPLES
Start
.Nm
with s6 in the background:
.Dl dwl -s 's6-svscan <&-'
.Sh SEE ALSO
.Xr foot 1 ,
.Xr wmenu 1 ,
.Xr dwm 1 ,
.Xr xkeyboard-config 7
.Sh CAVEATS
The child process's standard input is connected with a pipe to
.Nm .
If the child process neither reads from the pipe nor closes its
standard input,
.Nm
will freeze after a while due to it blocking when writing to the full
pipe buffer.
.Sh BUGS
All of them.
+1775 -1176
View File
File diff suppressed because it is too large Load Diff
+5
View File
@@ -0,0 +1,5 @@
[Desktop Entry]
Name=dwl
Comment=dwm for Wayland
Exec=dwl
Type=Application
-49
View File
@@ -1,49 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<protocol name="idle">
<copyright><![CDATA[
Copyright (C) 2015 Martin Gräßlin
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU Lesser General Public License as published by
the Free Software Foundation, either version 2.1 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
]]></copyright>
<interface name="org_kde_kwin_idle" version="1">
<description summary="User idle time manager">
This interface allows to monitor user idle time on a given seat. The interface
allows to register timers which trigger after no user activity was registered
on the seat for a given interval. It notifies when user activity resumes.
This is useful for applications wanting to perform actions when the user is not
interacting with the system, e.g. chat applications setting the user as away, power
management features to dim screen, etc..
</description>
<request name="get_idle_timeout">
<arg name="id" type="new_id" interface="org_kde_kwin_idle_timeout"/>
<arg name="seat" type="object" interface="wl_seat"/>
<arg name="timeout" type="uint" summary="The idle timeout in msec"/>
</request>
</interface>
<interface name="org_kde_kwin_idle_timeout" version="1">
<request name="release" type="destructor">
<description summary="release the timeout object"/>
</request>
<request name="simulate_user_activity">
<description summary="Simulates user activity for this timeout, behaves just like real user activity on the seat"/>
</request>
<event name="idle">
<description summary="Triggered when there has not been any user activity in the requested idle time interval"/>
</event>
<event name="resumed">
<description summary="Triggered on the first user activity after an idle event"/>
</event>
</interface>
</protocol>
@@ -0,0 +1,128 @@
<?xml version="1.0" encoding="UTF-8"?>
<protocol name="wlr_output_power_management_unstable_v1">
<copyright>
Copyright © 2019 Purism SPC
Permission is hereby granted, free of charge, to any person obtaining a
copy of this software and associated documentation files (the "Software"),
to deal in the Software without restriction, including without limitation
the rights to use, copy, modify, merge, publish, distribute, sublicense,
and/or sell copies of the Software, and to permit persons to whom the
Software is furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice (including the next
paragraph) shall be included in all copies or substantial portions of the
Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
DEALINGS IN THE SOFTWARE.
</copyright>
<description summary="Control power management modes of outputs">
This protocol allows clients to control power management modes
of outputs that are currently part of the compositor space. The
intent is to allow special clients like desktop shells to power
down outputs when the system is idle.
To modify outputs not currently part of the compositor space see
wlr-output-management.
Warning! The protocol described in this file is experimental and
backward incompatible changes may be made. Backward compatible changes
may be added together with the corresponding interface version bump.
Backward incompatible changes are done by bumping the version number in
the protocol and interface names and resetting the interface version.
Once the protocol is to be declared stable, the 'z' prefix and the
version number in the protocol and interface names are removed and the
interface version number is reset.
</description>
<interface name="zwlr_output_power_manager_v1" version="1">
<description summary="manager to create per-output power management">
This interface is a manager that allows creating per-output power
management mode controls.
</description>
<request name="get_output_power">
<description summary="get a power management for an output">
Create a output power management mode control that can be used to
adjust the power management mode for a given output.
</description>
<arg name="id" type="new_id" interface="zwlr_output_power_v1"/>
<arg name="output" type="object" interface="wl_output"/>
</request>
<request name="destroy" type="destructor">
<description summary="destroy the manager">
All objects created by the manager will still remain valid, until their
appropriate destroy request has been called.
</description>
</request>
</interface>
<interface name="zwlr_output_power_v1" version="1">
<description summary="adjust power management mode for an output">
This object offers requests to set the power management mode of
an output.
</description>
<enum name="mode">
<entry name="off" value="0"
summary="Output is turned off."/>
<entry name="on" value="1"
summary="Output is turned on, no power saving"/>
</enum>
<enum name="error">
<entry name="invalid_mode" value="1" summary="inexistent power save mode"/>
</enum>
<request name="set_mode">
<description summary="Set an outputs power save mode">
Set an output's power save mode to the given mode. The mode change
is effective immediately. If the output does not support the given
mode a failed event is sent.
</description>
<arg name="mode" type="uint" enum="mode" summary="the power save mode to set"/>
</request>
<event name="mode">
<description summary="Report a power management mode change">
Report the power management mode change of an output.
The mode event is sent after an output changed its power
management mode. The reason can be a client using set_mode or the
compositor deciding to change an output's mode.
This event is also sent immediately when the object is created
so the client is informed about the current power management mode.
</description>
<arg name="mode" type="uint" enum="mode"
summary="the output's new power management mode"/>
</event>
<event name="failed">
<description summary="object no longer valid">
This event indicates that the output power management mode control
is no longer valid. This can happen for a number of reasons,
including:
- The output doesn't support power management
- Another client already has exclusive power management mode control
for this output
- The output disappeared
Upon receiving this event, the client should destroy this object.
</description>
</event>
<request name="destroy" type="destructor">
<description summary="destroy this power management">
Destroys the output power management mode control object.
</description>
</request>
</interface>
</protocol>
+51
View File
@@ -0,0 +1,51 @@
/* See LICENSE.dwm file for copyright and license details. */
#include <stdarg.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <fcntl.h>
#include "util.h"
void
die(const char *fmt, ...) {
va_list ap;
va_start(ap, fmt);
vfprintf(stderr, fmt, ap);
va_end(ap);
if (fmt[0] && fmt[strlen(fmt)-1] == ':') {
fputc(' ', stderr);
perror(NULL);
} else {
fputc('\n', stderr);
}
exit(1);
}
void *
ecalloc(size_t nmemb, size_t size)
{
void *p;
if (!(p = calloc(nmemb, size)))
die("calloc:");
return p;
}
int
fd_set_nonblock(int fd) {
int flags = fcntl(fd, F_GETFL);
if (flags < 0) {
perror("fcntl(F_GETFL):");
return -1;
}
if (fcntl(fd, F_SETFL, flags | O_NONBLOCK) < 0) {
perror("fcntl(F_SETFL):");
return -1;
}
return 0;
}
+5
View File
@@ -0,0 +1,5 @@
/* See LICENSE.dwm file for copyright and license details. */
void die(const char *fmt, ...);
void *ecalloc(size_t nmemb, size_t size);
int fd_set_nonblock(int fd);