Commit Graph

115 Commits

Author SHA1 Message Date
Ivan Molodetskikh b20d8e7062 Implement ext-session-lock 2023-10-24 15:06:07 +04:00
Ivan Molodetskikh 3fd421f13f Update Smithay 2023-10-24 15:05:14 +04:00
Ivan Molodetskikh fb866c63e5 Extract update_pointer_focus() 2023-10-21 20:58:30 +04:00
Ivan Molodetskikh bae9575cc1 Rename refresh_cursor_focus() into pointer 2023-10-21 20:58:30 +04:00
Ivan Molodetskikh 8bde252ba4 Stop updating focus during transitions
This also includes touchpad swipes.
2023-10-21 20:58:30 +04:00
Ivan Molodetskikh 052ecdbe2a Check for ongoing animations earlier
Removes the inconsistency that when animating towards an empty
pointer position, the focus change would not wait until the end of the
animation.
2023-10-15 18:58:48 +04:00
Ivan Molodetskikh da59dfc5b4 Refresh pointer focus continuously
Fixes pointer focus not updating after:
- switching workspaces
- switching between windows so they move around
- client appearing below cursor
- client resizing to appear below cursor

And all other similar cases. Hopefully this doesn't slow things down
too much. Preliminary tracy analysis seems to indicate that it doesn't.
2023-10-15 16:33:24 +04:00
Ivan Molodetskikh d59fe34243 Make clear color a const
The damage tracker doesn't understand clear color changes.
2023-10-13 13:30:36 +04:00
Ivan Molodetskikh 0a32747495 Send dmabuf feedbacks from the backend 2023-10-13 13:30:36 +04:00
Ivan Molodetskikh f625dede1a Extract niri.clear_color() 2023-10-13 13:30:36 +04:00
Ivan Molodetskikh 3602876b5e Add a few more Tracy spans 2023-10-11 14:53:53 +04:00
Ivan Molodetskikh c8105ae1a6 Add screenshot-window action 2023-10-10 12:42:24 +04:00
Ivan Molodetskikh cb73bcfb32 Don't clear screenshot buffers
This is especially relevant for window screenshots.
2023-10-10 12:41:13 +04:00
Ivan Molodetskikh e78def3e2c Store screenshot in clipboard 2023-10-10 12:11:05 +04:00
Ivan Molodetskikh 082d734b2a Make zbus optional under "dbus" feature 2023-10-10 10:25:33 +04:00
Ivan Molodetskikh 9d7fdc4fc0 Fix redraw state resetting on redraw cancel 2023-10-10 10:03:14 +04:00
Ivan Molodetskikh 02f37c8573 Extract dbus server startup 2023-10-10 09:55:44 +04:00
Ivan Molodetskikh 66533ae0b1 Extract inhibit_power_key() 2023-10-10 09:02:33 +04:00
Ivan Molodetskikh d66bd87c66 Rename ToNiriMsg to ScreenCastToNiri 2023-10-10 08:55:54 +04:00
Ivan Molodetskikh a0b8da69c7 Extract on_screen_shot_msg 2023-10-10 08:54:15 +04:00
Ivan Molodetskikh 3c200fd64a Move dbus and systemd initialization out of Niri::new 2023-10-10 08:49:47 +04:00
Ivan Molodetskikh d9253a7137 Extract data variable 2023-10-10 07:59:50 +04:00
Ivan Molodetskikh 9fb8c616a8 Add a State::new tracy span 2023-10-10 07:57:22 +04:00
Ivan Molodetskikh 2508d3e08e Move refresh calls into State 2023-10-10 07:55:31 +04:00
Ivan Molodetskikh 189d1bd97b Add power-off-monitors bind
Implements https://github.com/YaLTeR/niri/issues/24
2023-10-09 18:37:43 +04:00
Ivan Molodetskikh d91d5d674c Set redraw state to idle on early returns
Haven't hit any problems due to this yet, but I suspect that it's
possible.
2023-10-09 17:40:28 +04:00
Ivan Molodetskikh 05b5ba0555 Add Niri::new Tracy span 2023-10-09 17:36:58 +04:00
Ivan Molodetskikh 0411fd8d90 Set correct output position for Wayland 2023-10-07 21:02:37 +04:00
Ivan Molodetskikh 6fcdb41922 Refactor layout for configurability, add preset-column-widths option
layout.rs finally gets a struct actually named Layout.
2023-10-05 09:25:07 +04:00
Ivan Molodetskikh 1bcc889e62 Add tablet map-to-output setting 2023-10-03 17:02:07 +04:00
Ivan Molodetskikh ba0a6d6b88 Remove accidentally committed debug element 2023-10-02 18:55:10 +04:00
Ivan Molodetskikh 382c049b5a Send output enter/leave to pointer and DnD surfaces
This allows them to apply the right scale factor.
2023-10-02 18:48:41 +04:00
Kirill Chibisov 9168f08038 protocols: add wlr_data_control
Also update smithay to the latest git hash.

Fixes #20.
2023-10-02 16:28:08 +03:00
Ivan Molodetskikh 5b6b3fcfbe Avoid sending frame callbacks to invisible surfaces 2023-10-01 19:41:42 +04:00
Kirill Chibisov d8a511bbac config/input: add cursor section
This should allow users to configure theme and size for the cursor,
as well as automatically set `XCURSOR_THEME` and `XCURSOR_SIZE` env
variables.
2023-10-01 17:50:42 +03:00
Ivan Molodetskikh 8d443c2e84 Make default cursor respect output scale
First part of https://github.com/YaLTeR/niri/issues/16
2023-10-01 08:03:12 +04:00
Kirill Chibisov d39da3f461 protocols: add IME protocols
This commit adds support for the `input_method_v2`, `text_input_v3`,
and `virtual_keyboard`. The implementation follows the one in the
anvil and catacomb, but those protocols are mostly enabled and
forget type of things.

Fixes #22.
2023-10-01 06:29:33 +03:00
Ivan Molodetskikh a3aa5fca12 Refactor frame scheduling
Combine the redraw state variables into one enum, and refactor to get
rid of the requirement that a VBlank must queue a subsequent redraw.
Also fix the bug where ongoing animations that produced no damage could
stall the redrawing.
2023-09-30 17:13:56 +04:00
Ivan Molodetskikh 21737abbfd Make output position configurable
Implements https://github.com/YaLTeR/niri/issues/14
2023-09-30 11:33:02 +04:00
Ivan Molodetskikh f381db8354 Make pipewire / xdp-gnome-screencast optional 2023-09-30 09:58:34 +04:00
Ivan Molodetskikh 404661ed8d Throttle frame callbacks to once per monitor refresh
Under some circumstances, the compositor can get into a commit-frame
callback busy loop with a client. For example, if a client redraws on
frame callbacks, but the resulting frame has empty damage (e.g. the
damaged part of the client is outside the monitor). Or if the client
simply commits with empty damage (looking at you, Firefox).

This behavior is compliant with the Wayland specification and with the
intended idea of frame callbacks, but causes a lot of unnecessary CPU
usage in the client and the compositor.

To solve this problem, this commit introduces frame callback throttling.

Every surface may only receive a single frame callback in one
monitor refresh cycle. If a surface commits resulting in no KMS frame
submission, a timer is created, that will fire at the predicted would-
be-VBlank time, and send the accumulated frame callbacks.

This way, a surface that redraws on frame callbacks will not notice
any change in frame callback delivery, if its commits suddenly stop
producing KMS updates.
2023-09-29 13:12:50 +04:00
Kirill Chibisov 804e064826 shell: add support for kde server decorations
This should provide server side decorations for the gtk3 applications,
like firefox.
2023-09-27 18:38:38 +04:00
Ivan Molodetskikh 5d8bb2589e Fix layer-shell render layering 2023-09-27 08:50:00 +04:00
Ivan Molodetskikh 93369e1958 Implement primary selecton
Firefox clipboard doesn't always work without it.
2023-09-26 22:22:11 +04:00
Ivan Molodetskikh 953d1064c2 Add layer shell exclusive zone support 2023-09-26 20:12:04 +04:00
Ivan Molodetskikh 4a585a3293 Add initial config hot reloading 2023-09-26 19:24:50 +04:00
Ivan Molodetskikh 80928632ba Add prefer-no-csd option 2023-09-26 13:45:03 +04:00
Ivan Molodetskikh a62e1cbef6 Make focus ring configurable 2023-09-26 13:45:03 +04:00
Ivan Molodetskikh 906ee36a93 Skip rendering when backend is inactive 2023-09-26 13:45:03 +04:00
Ivan Molodetskikh ac16717f4e Avoid unwraps in more places 2023-09-26 13:45:03 +04:00