git.lucas.co / cce-compositor
Wayland compositor (wlroots)
git clone https://git.lucas.co/cce-compositor.git

commit0982037e76ce812f31d89d6c1f1af37e931b2554
parent2f577d6e73
authorIsaac Freund <[email protected]>
date2025-07-03 15:00
rwm: make naming more concise

I always found update_windowing_start/update_rendering_start quite
long and cumbersome. The term "windowing state" is also pretty awkward

I've finally come up with naming that I like more: manage is obviously
the correct verb for what a window manager does and rendering can be
shortened to render. Also the word update can be dropped completely.

Apologies for the breaking change, it should be a pretty easy global
find/replace though.

 protocol/river-window-management-v1.xml | 582 ++++++++++++++++----------------
 river/Cursor.zig                        |  20 +-
 river/Decoration.zig                    |   2 +-
 river/Output.zig                        |   8 +-
 river/OutputManager.zig                 |  28 +-
 river/PointerBinding.zig                |  18 +-
 river/Seat.zig                          |  66 ++--
 river/ShellSurface.zig                  |   2 +-
 river/Window.zig                        | 142 ++++----
 river/WindowManager.zig                 | 150 ++++----
 river/XdgToplevel.zig                   |   8 +-
 river/XkbBinding.zig                    |  22 +-
 rivercompat/Background.zig              |   2 +-
 rivercompat/Output.zig                  |   2 +-
 rivercompat/Seat.zig                    |   2 +-
 rivercompat/Window.zig                  |  16 +-
 rivercompat/WindowManager.zig           |  26 +-
 17 files changed, 543 insertions(+), 553 deletions(-)

diff --git a/protocol/river-window-management-v1.xml b/protocol/river-window-management-v1.xml
index 81dec2d..9f2e34d 100644
--- a/protocol/river-window-management-v1.xml
+++ b/protocol/river-window-management-v1.xml
@@ -40,10 +40,10 @@
 
       There are two disjoint categories of state managed by this protocol:
 
-      Windowing state influences the communication between the server and
-      individual window clients (e.g. xdg_toplevels). Windowing state includes
-      window dimensions, fullscreen state, keyboard focus, keyboard bindings,
-      and more.
+      Window management state influences the communication between the server
+      and individual window clients (e.g. xdg_toplevels). Window management
+      state includes window dimensions, fullscreen state, keyboard focus,
+      keyboard bindings, and more.
 
       Rendering state only affects the rendered output of the compositor and
       does not influence communication between the server and individual window
@@ -51,69 +51,67 @@
       windows, shell surfaces, decoration surfaces, borders, window cropping,
       and more.
 
-      Windowing state may only be modified by the window manager as part of a
-      windowing update sequence. A windowing update sequence is started with the
-      update_windowing_start event and ended with the update_windowing_finish
-      request. It is a protocol error to modify window state outside of a
-      windowing update sequence.
-
-      A windowing update sequence is always followed by at least one rendering
-      update sequence. A rendering update sequence is started with the
-      update_rendering_start event and ended with the update
-      update_rendering_finish request.
-
-      Rendering state may be modified by the window manager during a windowing
-      update sequence or a rendering update sequence. Regardless of when the
-      rendering state is modified, it is applied with the next
-      update_rendering_finish request. It is a protocol error to modify
-      rendering state outside of a windowing or rendering update sequence.
-
-      The server will start a windowing update sequence by sending new state and
-      the update_windowing_start event as soon as possible whenever there is a
-      change in state that must be communicated with the window manager.
-
-      If the window manager client needs to ensure a windowing update sequence
-      is started due to a state change the compositor is not aware of, it may
-      send the update_windowing_dirty request.
-
-      The server will start a rendering update sequence by sending new state and
-      the update_rendering_start event as soon as possible whenever there is a
-      change in window dimensions or position that must be communicated with the
-      window manager. Multiple rendering update sequences may be made
-      consecutively without a windowing update sequence in between, for example
-      during interactive move/resize of windows or if a window independently
-      changes its own dimensions.
+      Window management state may only be modified by the window manager as part
+      of a manage sequence. A manage sequence is started with the manage_start
+      event and ended with the manage_finish request. It is a protocol error to
+      modify window management state outside of a manage sequence.
+
+      A manage sequence is always followed by at least one render sequence. A
+      render sequence is started with the render_start event and ended with the
+      render_finish request.
+
+      Rendering state may be modified by the window manager during a manage
+      sequence or a render sequence. Regardless of when the rendering state is
+      modified, it is applied with the next render_finish request. It is a
+      protocol error to modify rendering state outside of a manage or render
+      sequence.
+
+      The server will start a manage sequence by sending new state and the
+      manage_start event as soon as possible whenever there is a change in state
+      that must be communicated with the window manager.
+
+      If the window manager client needs to ensure a manage sequence is started
+      due to a state change the compositor is not aware of, it may send the
+      manage_dirty request.
+
+      The server will start a render sequence by sending new state and the
+      render_start event as soon as possible whenever there is a change in
+      window dimensions or position that must be communicated with the window
+      manager. Multiple render sequences may be made consecutively without a
+      manage sequence in between, for example during interactive move/resize of
+      windows or if a window independently changes its own dimensions.
 
       To summarize the main loop of this protocol is as follows:
 
       1. The server sends events indicating all changes since the last
-         windowing update followed by the update_windowing_start event.
+         manage sequence followed by the manage_start event.
 
-      2. The client sends requests modifying windowing state or rendering state
-         (as defined above) followed by the update_windowing_finish request.
+      2. The client sends requests modifying window management state or
+         rendering state (as defined above) followed by the manage_finish
+         request.
 
       3. The server sends new state to windows and waits for responses.
 
-      4. The server sends new window position and/or dimensions to the client
-         followed by the update_rendering_start event.
+      4. The server sends new window dimensions to the client followed by the
+         render_start event.
 
       5. The client sends requests modifying rendering state (as defined above)
-         followed by the update_rendering_finish request.
+         followed by the render_finish request.
 
       6. If window dimensions/positions change, loop back to step 4.
-         If state that requires a windowing update sequence changes or if the
-         client makes an update_windowing_dirty request, loop back to step 1.
+         If state that requires a manage sequence changes or if the client makes
+         a manage_dirty request, loop back to step 1.
 
       For the purposes of frame perfection, the server may delay rendering new
       state committed by the windows in step 3 until after step 5 is finished.
 
-      It is a protocol error for the client to make an update_windowing_finish
-      or update_rendering_finish request that violates this ordering.
+      It is a protocol error for the client to make a manage_finish or
+      render_finish request that violates this ordering.
     </description>
 
     <enum name="error">
-      <entry name="update_sequence_order" value="0"
-        sumary="request violates update sequence ordering"/>
+      <entry name="sequence_order" value="0"
+        sumary="request violates manage/render sequence ordering"/>
       <entry name="role" value="1"
         summary="given wl_surface already has a role"/>
     </enum>
@@ -121,9 +119,8 @@
     <event name="unavailable">
       <description summary="window management unavailable">
         This event indicates that window management is not available to the
-        client, perhaps due to another window management client already
-        running. The circumstances causing this event to be sent are compositor
-        policy.
+        client, perhaps due to another window management client already running.
+        The circumstances causing this event to be sent are compositor policy.
 
         If sent, this event is guaranteed to be the first and only event sent by
         the server.
@@ -166,77 +163,76 @@
       </description>
     </request>
 
-    <event name="update_windowing_start">
-      <description summary="start a windowing update sequence">
+    <event name="manage_start">
+      <description summary="start a manage sequence">
         This event indicates that the server has sent events indicating all
-        state changes since the last windowing update sequence.
+        state changes since the last manage sequence.
 
         In response to this event, the client should make requests modifying
-        windowing state as it chooses. Then, the client must make the
-        update_windowing_finish request.
+        window management state as it chooses. Then, the client must make the
+        manage_finish request.
 
         See the description of the river_window_manager_v1 interface for a
-        complete overview of the update sequence loop.
+        complete overview of the manage/render sequence loop.
       </description>
     </event>
 
-    <request name="update_windowing_finish">
-      <description summary="finish a windowing update sequence">
-        This request indicates that the client has made all changes to windowing
-        state it wishes to include in the current update sequence and that the
-        server should atomically send these state changes to the windows and
-        continue with the update sequence.
+    <request name="manage_finish">
+      <description summary="finish a manage sequence">
+        This request indicates that the client has made all changes to window
+        management state it wishes to include in the current manage sequence and
+        that the server should atomically send these state changes to the
+        windows and continue with the manage sequence.
 
         After sending this request, it is a protocol error for the client to
-        make further changes to windowing state until the next
-        update_windowing_start event is received.
+        make further changes to window management state until the next
+        manage_start event is received.
 
         See the description of the river_window_manager_v1 interface for a
-        complete overview of the update sequence loop.
+        complete overview of the manage/render sequence loop.
       </description>
     </request>
 
-    <request name="update_windowing_dirty">
-      <description summary="ensure a windowing update sequence is started">
-        This request ensures a windowing update sequence is started and that an
-        update_windowing_start event is sent by the server. If this request is
-        made during an ongoing update sequence, a new update sequence will be
-        started as soon as the current one is completed.
+    <request name="manage_dirty">
+      <description summary="ensure a manage sequence is started">
+        This request ensures a manage sequence is started and that a
+        manage_start event is sent by the server. If this request is made during
+        an ongoing manage sequence, a new manage sequence will be started as
+        soon as the current one is completed.
 
         The client may want to use this request due to an internal state change
         that the compositor is not aware of (e.g. a dbus event) which should
-        affect windowing or rendering state.
+        affect window management or rendering state.
       </description>
     </request>
 
-    <event name="update_rendering_start">
-      <description summary="start a rendering update sequence">
+    <event name="render_start">
+      <description summary="start a render sequence">
         This event indicates that the server has sent all river_node_v1.position
         and river_window_v1.dimensions events necessary.
 
         In response to this event, the client should make requests modifying
         rendering state as it chooses. Then, the client must make the
-        update_rendering_finish request.
+        render_finish request.
 
         See the description of the river_window_manager_v1 interface for a
-        complete overview of the update sequence loop.
+        complete overview of the manage/render sequence loop.
       </description>
     </event>
 
-    <request name="update_rendering_finish">
-      <description summary="finish a rendering update sequence">
+    <request name="render_finish">
+      <description summary="finish a render sequence">
         This request indicates that the client has made all changes to rendering
-        state it wishes to include in the current update sequence and that the
+        state it wishes to include in the current manage sequence and that the
         server should atomically apply and display these state changes to the
         user.
 
         After sending this request, it is a protocol error for the client to
-        make further changes to rendering state until the next
-        update_windowing_start or update_rendering_start event is received,
-        whichever comes first.
+        make further changes to rendering state until the next manage_start or
+        render_start event is received, whichever comes first.
 
         See the description of the river_window_manager_v1 interface for a
-        complete overview of the update sequence loop.
+        complete overview of the manage/render sequence loop.
       </description>
     </request>
 
@@ -247,8 +243,8 @@
         The window manager may wish to restrict which key bindings are available
         while locked or otherwise use this information.
 
-        This event will be followed by an update_windowing_start event after all
-        other new state has been sent by the server.
+        This event will be followed by a manage_start event after all other new
+        state has been sent by the server.
       </description>
     </event>
 
@@ -256,8 +252,8 @@
       <description summary="the session has been unlocked">
         This event indicates that the session has been unlocked.
 
-        This event will be followed by an update_windowing_start event after all
-        other new state has been sent by the server.
+        This event will be followed by a manage_start event after all other new
+        state has been sent by the server.
       </description>
     </event>
 
@@ -265,8 +261,8 @@
       <description summary="new window">
         A new window has been created.
 
-        This event will be followed by an update_windowing_start event after all
-        other new state has been sent by the server.
+        This event will be followed by a manage_start event after all other new
+        state has been sent by the server.
       </description>
       <arg name="id" type="new_id" interface="river_window_v1"/>
     </event>
@@ -277,8 +273,8 @@
         monitor being plugged in or perhaps due to a change in configuration.
 
         This event will be followed by river_output_v1.position and dimensions
-        events as well as an update_windowing_start event after all other new
-        state has been sent by the server.
+        events as well as a manage_start event after all other new state has
+        been sent by the server.
       </description>
       <arg name="id" type="new_id" interface="river_output_v1"/>
     </event>
@@ -287,8 +283,8 @@
       <description summary="new seat">
         A new seat has been created.
 
-        This event will be followed by an update_windowing_start event after all
-        other new state has been sent by the server.
+        This event will be followed by a manage_start event after all other new
+        state has been sent by the server.
       </description>
       <arg name="id" type="new_id" interface="river_seat_v1"/>
     </event>
@@ -313,9 +309,8 @@
 
       A newly created window will not be displayed until the window manager
       proposes window dimensions with the propose_dimensions request as part of
-      a windowing update sequence, the server replies with a dimensions event as
-      part of a rendering update sequence, and that rendering update sequence is
-      finished.
+      a manage sequence, the server replies with a dimensions event as part of
+      a render sequence, and that render sequence is finished.
 
       TODO:
         - window cropping
@@ -347,8 +342,8 @@
         sent. The client should destroy this object with the
         river_window_v1.destroy request to free up resources.
 
-        This event will be followed by an update_windowing_start event after all
-        other new state has been sent by the server.
+        This event will be followed by a manage_start event after all other new
+        state has been sent by the server.
       </description>
     </event>
 
@@ -361,8 +356,8 @@
         The server will send a river_window_v1.closed event if/when the window
         has been closed.
 
-        This request modifies windowing state and may only be made as part of a
-        windowing update sequence, see the river_window_manager_v1 description.
+        This request modifies window management state and may only be made as
+        part of a manage sequence, see the river_window_manager_v1 description.
       </description>
     </request>
 
@@ -389,8 +384,8 @@
         The min_width/min_height must be strictly less than or equal to the
         max_width/max_height.
 
-        This event will be followed by an update_windowing_start event after all
-        other new state has been sent by the server.
+        This event will be followed by a manage_start event after all other new
+        state has been sent by the server.
       </description>
       <arg name="min_width" type="int"/>
       <arg name="min_height" type="int"/>
@@ -408,12 +403,12 @@
         the window content and are unaffected by the presence of borders or
         decoration surfaces.
 
-        This event is sent as part of a rendering update sequence before the
-        update_rendering_start event.
+        This event is sent as part of a render sequence before the render_start
+        event.
 
-        It may be sent due to a propose_dimensions request in a previous
-        windowing update sequence or because a window independently decides to
-        change its dimensions.
+        It may be sent due to a propose_dimensions request in a previous manage
+        sequence or because a window independently decides to change its
+        dimensions.
       </description>
       <arg name="width" type="int"/>
       <arg name="height" type="int"/>
@@ -435,19 +430,18 @@
 
         When a propose_dimensions request is made, the server must send a
         dimensions event in response as soon as possible. It may not be possible
-        to send a dimensions event in the very next rendering update sequence
-        if, for example, the window takes too long to respond to the first
-        proposed dimensions. In this case, the server will send the dimensions
-        event in a future rendering update sequence. The window will not be
-        displayed until the first dimensions event is received and the rendering
-        update sequence is finished.
+        to send a dimensions event in the very next render sequence if, for
+        example, the window takes too long to respond to the first proposed
+        dimensions. In this case, the server will send the dimensions event in a
+        future render sequence. The window will not be displayed until the first
+        dimensions event is received and the render sequence is finished.
 
         Note that the dimensions of a river_window_v1 refer to the dimensions of
         the window content and are unaffected by the presence of borders or
         decoration surfaces.
 
-        This request modifies windowing state and may only be made as part of a
-        windowing update sequence, see the river_window_manager_v1 description.
+        This request modifies window management state and may only be made as
+        part of a manage sequence, see the river_window_manager_v1 description.
       </description>
       <arg name="width" type="int"/>
       <arg name="height" type="int"/>
@@ -455,14 +449,14 @@
 
     <request name="hide">
       <description summary="request that the window be hidden">
-        Request that the window be hidden. Has no effect if the window is already
-        hidden. Hides any window borders and decorations as well.
+        Request that the window be hidden. Has no effect if the window is
+        already hidden. Hides any window borders and decorations as well.
 
         Newly created windows are considered shown unless explicitly hidden with
         the hide request.
 
-        This request modifies rendering state and may only be made as part of an
-        update sequence, see the river_window_manager_v1 description.
+        This request modifies rendering state and may only be made as part of a
+        render sequence, see the river_window_manager_v1 description.
       </description>
     </request>
 
@@ -475,8 +469,8 @@
         Newly created windows are considered shown unless explicitly hidden with
         the hide request.
 
-        This request modifies rendering state and may only be made as part of an
-        update sequence, see the river_window_manager_v1 description.
+        This request modifies rendering state and may only be made as part of a
+        render sequence, see the river_window_manager_v1 description.
       </description>
     </request>
 
@@ -488,8 +482,8 @@
         application ID or if the window cleared its application ID. (Xwayland
         windows may do this for example, though xdg-toplevels may not.)
 
-        This event will be followed by an update_windowing_start event after all
-        other new state has been sent by the server.
+        This event will be followed by a manage_start event after all other new
+        state has been sent by the server.
       </description>
       <arg name="app_id" type="string" allow-null="true"/>
     </event>
@@ -502,8 +496,8 @@
         if the window cleared its title. (Xwayland windows may do this for
         example, though xdg-toplevels may not.)
 
-        This event will be followed by an update_windowing_start event after all
-        other new state has been sent by the server.
+        This event will be followed by a manage_start event after all other new
+        state has been sent by the server.
       </description>
       <arg name="title" type="string" allow-null="true"/>
     </event>
@@ -521,8 +515,8 @@
         The compositor must guarantee that there are no loops in the window
         tree: a parent must not be the descendant of one of its children.
 
-        This event will be followed by an update_windowing_start event after all
-        other new state has been sent by the server.
+        This event will be followed by a manage_start event after all other new
+        state has been sent by the server.
       </description>
       <arg name="parent" type="object" allow-null="true"
         interface="river_window_v1"/>
@@ -547,8 +541,8 @@
         This event may be sent multiple times over the lifetime of the window if
         the window changes its preferences.
 
-        This event will be followed by an update_windowing_start event after all
-        other new state has been sent by the server.
+        This event will be followed by a manage_start event after all other new
+        state has been sent by the server.
       </description>
       <arg name="hint" type="uint" enum="decoration_hint"/>
     </event>
@@ -561,8 +555,8 @@
         This is the default if neither this request nor the use_ssd request is
         ever made.
 
-        This request modifies windowing state and may only be made as part of a
-        windowing update sequence, see the river_window_manager_v1 description.
+        This request modifies window management state and may only be made as
+        part of a manage sequence, see the river_window_manager_v1 description.
       </description>
     </request>
 
@@ -574,8 +568,8 @@
         This request will have no effect if the client only supports client side
         decoration, see the decoration_hint event.
 
-        This request modifies windowing state and may only be made as part of a
-        windowing update sequence, see the river_window_manager_v1 description.
+        This request modifies window management state and may only be made as
+        part of a manage sequence, see the river_window_manager_v1 description.
       </description>
     </request>
 
@@ -611,8 +605,8 @@
         position/dimensions of the window content and are unaffected by the
         presence of borders or decoration surfaces.
 
-        This request modifies rendering state and may only be made as part of an
-        update sequence, see the river_window_manager_v1 description.
+        This request modifies rendering state and may only be made as part of a
+        render sequence, see the river_window_manager_v1 description.
       </description>
       <arg name="edges" type="uint" enum="edges"/>
       <arg name="width" type="int"/>
@@ -635,8 +629,8 @@
         part of a tiled layout. If this request is never made, the window is
         informed that it is not part of a tiled layout.
 
-        This request modifies windowing state and may only be made as part of a
-        windowing update sequence, see the river_window_manager_v1 description.
+        This request modifies window management state and may only be made as
+        part of a manage sequence, see the river_window_manager_v1 description.
       </description>
       <arg name="edges" type="uint" enum="edges"/>
     </request>
@@ -679,8 +673,8 @@
         The window manager may use the river_seat_v1.op_start_serial request to
         interactively move the window or ignore this event entirely.
 
-        This event will be followed by an update_windowing_start event after all
-        other new state has been sent by the server.
+        This event will be followed by a manage_start event after all other new
+        state has been sent by the server.
       </description>
       <arg name="seat" type="object" interface="river_seat_v1"/>
       <arg name="serial" type="uint"/>
@@ -704,8 +698,8 @@
         The window manager may use the river_seat_v1.op_start_serial request to
         interactively resize the window or ignore this event entirely.
 
-        This event will be followed by an update_windowing_start event after all
-        other new state has been sent by the server.
+        This event will be followed by a manage_start event after all other new
+        state has been sent by the server.
       </description>
       <arg name="seat" type="object" interface="river_seat_v1"/>
       <arg name="serial" type="uint"/>
@@ -721,8 +715,8 @@
         The window manager remains responsible for handling the position and
         dimensions of the window while it is resizing.
 
-        This request modifies windowing state and may only be made as part of a
-        windowing update sequence, see the river_window_manager_v1 description.
+        This request modifies window management state and may only be made as
+        part of a manage sequence, see the river_window_manager_v1 description.
       </description>
     </request>
 
@@ -732,8 +726,8 @@
         should use this request to inform windows that are the target of an
         interactive resize that the interactive resize has ended for example.
 
-        This request modifies windowing state and may only be made as part of a
-        windowing update sequence, see the river_window_manager_v1 description.
+        This request modifies window management state and may only be made as
+        part of a manage sequence, see the river_window_manager_v1 description.
       </description>
     </request>
 
@@ -747,8 +741,8 @@
     <request name="set_capabilities">
       <description summary="inform window of supported capabilities">
         This request informs the window of the capabilities supported by the
-        window manager. If the window manager, for example, ignores requests
-        to be maximized from the window it should not tell the window that it
+        window manager. If the window manager, for example, ignores requests to
+        be maximized from the window it should not tell the window that it
         supports the maximize capability.
 
         The window might use this information to, for example, only show a
@@ -758,8 +752,8 @@
         for all new windows. If this request is never made, the compositor will
         inform windows that all capabilities are supported.
 
-        This request modifies windowing state and may only be made as part of a
-        windowing update sequence, see the river_window_manager_v1 description.
+        This request modifies window management state and may only be made as
+        part of a manage sequence, see the river_window_manager_v1 description.
       </description>
       <arg name="caps" type="uint" enum="capabilities"/>
     </request>
@@ -778,8 +772,8 @@
         The x and y arguments indicate where the window requested that the
         window menu be shown.
 
-        This event will be followed by an update_windowing_start event after all
-        other new state has been sent by the server.
+        This event will be followed by a manage_start event after all other new
+        state has been sent by the server.
       </description>
       <arg name="x" type="int" summary="x offset from top left corner"/>
       <arg name="y" type="int" summary="y offset from top left corner"/>
@@ -793,8 +787,8 @@
         The window manager is free to honor this request using
         river_window_v1.inform_maximize or ignore it.
 
-        This event will be followed by an update_windowing_start event after all
-        other new state has been sent by the server.
+        This event will be followed by a manage_start event after all other new
+        state has been sent by the server.
       </description>
     </event>
 
@@ -806,8 +800,8 @@
         The window manager is free to honor this request using
         river_window_v1.inform_unmaximized or ignore it.
 
-        This event will be followed by an update_windowing_start event after all
-        other new state has been sent by the server.
+        This event will be followed by a manage_start event after all other new
+        state has been sent by the server.
       </description>
     </event>
 
@@ -820,8 +814,8 @@
         The window manager remains responsible for handling the position and
         dimensions of the window while it is maximized.
 
-        This request modifies windowing state and may only be made as part of a
-        windowing update sequence, see the river_window_manager_v1 description.
+        This request modifies window management state and may only be made as
+        part of a manage sequence, see the river_window_manager_v1 description.
       </description>
     </request>
 
@@ -831,8 +825,8 @@
         information to adapt the style of its client-side window decorations for
         example.
 
-        This request modifies windowing state and may only be made as part of a
-        windowing update sequence, see the river_window_manager_v1 description.
+        This request modifies window management state and may only be made as
+        part of a manage sequence, see the river_window_manager_v1 description.
       </description>
     </request>
 
@@ -844,8 +838,8 @@
         The window manager is free to honor this request using
         river_window_v1.fullscreen or ignore it.
 
-        This event will be followed by an update_windowing_start event after all
-        other new state has been sent by the server.
+        This event will be followed by a manage_start event after all other new
+        state has been sent by the server.
       </description>
       <arg name="output" type="object" allow-null="true"
         interface="river_output_v1" />
@@ -859,8 +853,8 @@
         The window manager is free to honor this request using
         river_window_v1.exit_fullscreen or ignore it.
 
-        This event will be followed by an update_windowing_start event after all
-        other new state has been sent by the server.
+        This event will be followed by a manage_start event after all other new
+        state has been sent by the server.
       </description>
     </event>
 
@@ -875,8 +869,8 @@
         shall not affect the current position and dimensions of a fullscreen
         window.
 
-        This request modifies windowing state and may only be made as part of a
-        windowing update sequence, see the river_window_manager_v1 description.
+        This request modifies window management state and may only be made as
+        part of a manage sequence, see the river_window_manager_v1 description.
       </description>
       <arg name="output" type="object" interface="river_output_v1"/>
     </request>
@@ -889,8 +883,8 @@
         determined by the most recent set_position and propose_dimensions
         requests.
 
-        This request modifies windowing state and may only be made as part of a
-        windowing update sequence, see the river_window_manager_v1 description.
+        This request modifies window management state and may only be made as
+        part of a manage sequence, see the river_window_manager_v1 description.
       </description>
     </request>
 
@@ -902,8 +896,8 @@
         The window manager is free to ignore this request, hide the window, or
         do whatever else it chooses.
 
-        This event will be followed by an update_windowing_start event after all
-        other new state has been sent by the server.
+        This event will be followed by a manage_start event after all other new
+        state has been sent by the server.
       </description>
     </event>
   </interface>
@@ -941,8 +935,8 @@
         If this request is never sent, the x and y offsets are undefined by this
         protocol and left up to the compositor.
 
-        This request modifies rendering state and may only be made as part of an
-        update sequence, see the river_window_manager_v1 description.
+        This request modifies rendering state and may only be made as part of a
+        render sequence, see the river_window_manager_v1 description.
       </description>
       <arg name="x" type="int"/>
       <arg name="y" type="int"/>
@@ -952,14 +946,14 @@
       <description summary="sync next commit with other rendering state">
         Synchronize application of the next wl_surface.commit request on the
         decoration surface with rest of the state atomically applied with the
-        next river_window_manager_v1.update_rendering_finish request.
+        next river_window_manager_v1.render_finish request.
 
         The client must make a wl_surface.commit request on the decoration
-        surface after this request and before the update_rendering_finish
-        request, failure to do so is a protocol error.
+        surface after this request and before the render_finish request, failure
+        to do so is a protocol error.
 
-        This request modifies rendering state and may only be made as part of an
-        update sequence, see the river_window_manager_v1 description.
+        This request modifies rendering state and may only be made as part of a
+        render sequence, see the river_window_manager_v1 description.
       </description>
     </request>
   </interface>
@@ -999,14 +993,14 @@
       <description summary="sync next surface commit to window manager commit">
         Synchronize application of the next wl_surface.commit request on the
         shell surface with rest of the rendering state atomically applied with
-        the next river_window_manager_v1.update_rendering_finish request.
+        the next river_window_manager_v1.render_finish request.
 
         The client must make a wl_surface.commit request on the shell surface
-        after this request and before the update_rendering_finish request,
-        failure to do so is a protocol error.
+        after this request and before the render_finish request, failure to do
+        so is a protocol error.
 
-        This request modifies rendering state and may only be made as part of an
-        update sequence, see the river_window_manager_v1 description.
+        This request modifies rendering state and may only be made as part of a
+        render sequence, see the river_window_manager_v1 description.
       </description>
     </request>
   </interface>
@@ -1042,8 +1036,8 @@
         If this request is never sent, the position of the node is undefined by
         this protocol and left up to the compositor.
 
-        This request modifies rendering state and may only be made as part of an
-        update sequence, see the river_window_manager_v1 description.
+        This request modifies rendering state and may only be made as part of a
+        render sequence, see the river_window_manager_v1 description.
       </description>
       <arg name="x" type="int"/>
       <arg name="y" type="int"/>
@@ -1054,8 +1048,8 @@
         This request places the node above all other nodes in the compositor's
         render list.
 
-        This request modifies rendering state and may only be made as part of an
-        update sequence, see the river_window_manager_v1 description.
+        This request modifies rendering state and may only be made as part of a
+        render sequence, see the river_window_manager_v1 description.
       </description>
     </request>
 
@@ -1064,8 +1058,8 @@
         This request places the node below all other nodes in the compositor's
         render list.
 
-        This request modifies rendering state and may only be made as part of an
-        update sequence, see the river_window_manager_v1 description.
+        This request modifies rendering state and may only be made as part of a
+        render sequence, see the river_window_manager_v1 description.
       </description>
     </request>
 
@@ -1076,8 +1070,8 @@
 
         Attempting to place a node above itself has no effect.
 
-        This request modifies rendering state and may only be made as part of an
-        update sequence, see the river_window_manager_v1 description.
+        This request modifies rendering state and may only be made as part of a
+        render sequence, see the river_window_manager_v1 description.
       </description>
       <arg name="other" type="object" interface="river_node_v1"/>
     </request>
@@ -1089,8 +1083,8 @@
 
         Attempting to place a node below itself has no effect.
 
-        This request modifies rendering state and may only be made as part of an
-        update sequence, see the river_window_manager_v1 description.
+        This request modifies rendering state and may only be made as part of a
+        render sequence, see the river_window_manager_v1 description.
       </description>
       <arg name="other" type="object" interface="river_node_v1"/>
     </request>
@@ -1128,8 +1122,8 @@
         This event may be sent because a corresponding physical output has been
         physically unplugged or because some output configuration has changed.
 
-        This event will be followed by an update_windowing_start event after all
-        other new state has been sent by the server.
+        This event will be followed by a manage_start event after all other new
+        state has been sent by the server.
       </description>
     </event>
 
@@ -1148,7 +1142,7 @@
         The global_remove event for the corresponding wl_output may be sent
         before the river_output_v1.remove event. This is due to the fact that
         river_output_v1 state changes are synced to the river window management
-        update sequence while changes to globals are not.
+        manage sequence while changes to globals are not.
 
         Rationale: The window manager may need information provided by the
         wl_output interface such as the name/description. It also may need the
@@ -1166,12 +1160,12 @@
         This event is sent once when the river_output_v1 is created and again
         whenever the position changes.
 
-        This event will be followed by an update_windowing_start event after all
-        other new state has been sent by the server.
+        This event will be followed by a manage_start event after all other new
+        state has been sent by the server.
 
         The server must guarantee that the position and dimensions events do not
         cause the areas of multiple logical outputs to overlap when the
-        corresponding update_windowing_start event is received.
+        corresponding manage_start event is received.
       </description>
       <arg name="x" type="int"/>
       <arg name="y" type="int"/>
@@ -1186,12 +1180,12 @@
         This event is sent once when the river_output_v1 is created and again
         whenever the dimensions change.
 
-        This event will be followed by an update_windowing_start event after all
-        other new state has been sent by the server.
+        This event will be followed by a manage_start event after all other new
+        state has been sent by the server.
 
         The server must guarantee that the position and dimensions events do not
         cause the areas of multiple logical outputs to overlap when the
-        corresponding update_windowing_start event is received.
+        corresponding manage_start event is received.
       </description>
       <arg name="width" type="int"/>
       <arg name="height" type="int"/>
@@ -1226,12 +1220,12 @@
         destroyed.
 
         The server will send no further events on this object and ignore any
-        request (other than river_seat_v1.destroy) made after this event is sent.
-        The client should destroy this object with the river_seat_v1.destroy
-        request to free up resources.
+        request (other than river_seat_v1.destroy) made after this event is
+        sent.  The client should destroy this object with the
+        river_seat_v1.destroy request to free up resources.
 
-        This event will be followed by an update_windowing_start event after all
-        other new state has been sent by the server.
+        This event will be followed by a manage_start event after all other new
+        state has been sent by the server.
       </description>
     </event>
 
@@ -1250,11 +1244,11 @@
         The global_remove event for the corresponding wl_seat may be sent before
         the river_seat_v1.remove event. This is due to the fact that
         river_seat_v1 state changes are synced to the river window management
-        update sequence while changes to globals are not.
+        manage sequence while changes to globals are not.
 
-        Rationale: The window manager may want to trigger windowing state
-        changes based on normal input events received by its shell surfaces for
-        example.
+        Rationale: The window manager may want to trigger window management
+        state changes based on normal input events received by its shell
+        surfaces for example.
       </description>
       <arg name="wl_seat" type="object" interface="wl_seat"/>
     </event>
@@ -1263,8 +1257,8 @@
       <description summary="give keyboard focus to a window">
         Request that the compositor send keyboard input to the given window.
 
-        This request modifies windowing state and may only be made as part of a
-        windowing update sequence, see the river_window_manager_v1 description.
+        This request modifies window management state and may only be made as
+        part of a manage sequence, see the river_window_manager_v1 description.
       </description>
       <arg name="window" type="object" interface="river_window_v1"/>
     </request>
@@ -1274,8 +1268,8 @@
         Request that the compositor send keyboard input to the given shell
         surface.
 
-        This request modifies windowing state and may only be made as part of a
-        windowing update sequence, see the river_window_manager_v1 description.
+        This request modifies window management state and may only be made as
+        part of a manage sequence, see the river_window_manager_v1 description.
       </description>
       <arg name="shell_surface" type="object" interface="river_shell_surface_v1"/>
     </request>
@@ -1284,8 +1278,8 @@
       <description summary="clear keyboard focus">
         Request that the compositor not send keyboard input to any client.
 
-        This request modifies windowing state and may only be made as part of a
-        windowing update sequence, see the river_window_manager_v1 description.
+        This request modifies window management state and may only be made as
+        part of a manage sequence, see the river_window_manager_v1 description.
       </description>
     </request>
 
@@ -1303,8 +1297,8 @@
         pointer moves between windows, the pointer_leave event for the old
         window must be sent before the pointer_enter event for the new window.
 
-        This event will be followed by an update_windowing_start event after all
-        other new state has been sent by the server.
+        This event will be followed by a manage_start event after all other new
+        state has been sent by the server.
       </description>
       <arg name="window" type="object" interface="river_window_v1"/>
     </event>
@@ -1314,8 +1308,8 @@
         The seat's pointer left the window for which pointer_enter was most
         recently sent. See pointer_enter for details.
 
-        This event will be followed by an update_windowing_start event after all
-        other new state has been sent by the server.
+        This event will be followed by a manage_start event after all other new
+        state has been sent by the server.
       </description>
     </event>
 
@@ -1324,12 +1318,12 @@
         The seat's pointer was moved.
 
         Rationale: The motivating window manager feature for this event is the
-        "always" style of focus-follows-cursor. Carrying out a full update
+        "always" style of focus-follows-cursor. Carrying out a full manage
         sequence on every single pointer motion event is noisy, wasteful, and
         unnecessary.
 
-        This event will be followed by an update_windowing_start event after all
-        other new state has been sent by the server.
+        This event will be followed by a manage_start event after all other new
+        state has been sent by the server.
       </description>
     </event>
 
@@ -1348,8 +1342,8 @@
         keyboard focus, etc. Rather than expose all pointer, touch, and tablet
         events to window managers, a policy over mechanism approach is taken.
 
-        This event will be followed by an update_windowing_start event after all
-        other new state has been sent by the server.
+        This event will be followed by a manage_start event after all other new
+        state has been sent by the server.
       </description>
       <arg name="window" type="object" interface="river_window_v1"/>
     </event>
@@ -1366,12 +1360,12 @@
 
         Rationale: While the shell surface does receive all wl_pointer,
         wl_touch, etc. input events for the surface directly, these events do
-        not necessarily trigger a windowing update sequence and therefore do not
-        allow the window manager to update focus or perform other actions in
-        response to the input in a race-free way.
+        not necessarily trigger a manage sequence and therefore do not allow the
+        window manager to update focus or perform other actions in response to
+        the input in a race-free way.
 
-        This event will be followed by an update_windowing_start event after all
-        other new state has been sent by the server.
+        This event will be followed by a manage_start event after all other new
+        state has been sent by the server.
       </description>
       <arg name="shell_surface" type="object" interface="river_shell_surface_v1"/>
     </event>
@@ -1391,13 +1385,13 @@
 
         The operation continues until the pointer button, touch point or similar
         corresponding to the given serial is released or the op_end request is
-        made and applied during a windowing update sequence.
+        made and applied during a manage sequence.
 
         This request is ignored if an operation is already in progress for a
         given river_seat_v1.
 
-        This request modifies windowing state and may only be made as part of a
-        windowing update sequence, see the river_window_manager_v1 description.
+        This request modifies window management state and may only be made as
+        part of a manage sequence, see the river_window_manager_v1 description.
       </description>
       <arg name="serial" type="uint"/>
     </request>
@@ -1412,11 +1406,11 @@
         dimensions based off of the op_delta events.
 
         The pointer operation continues until the op_end request is made during
-        a windowing update sequence and that update sequence is finished.
-        This request is ignored if an operation is already in progress.
+        a manage sequence and that manage sequence is finished. This request is
+        ignored if an operation is already in progress.
 
-        This request modifies windowing state and may only be made as part of a
-        windowing update sequence, see the river_window_manager_v1 description.
+        This request modifies window management state and may only be made as
+        part of a manage sequence, see the river_window_manager_v1 description.
       </description>
     </request>
 
@@ -1435,8 +1429,8 @@
 
         This request is ignored if there is no operation in progress.
 
-        This request modifies windowing state and may only be made as part of a
-        windowing update sequence, see the river_window_manager_v1 description.
+        This request modifies window management state and may only be made as
+        part of a manage sequence, see the river_window_manager_v1 description.
       </description>
     </request>
 
@@ -1463,8 +1457,8 @@
         This request may be useful to place bounds on an interactive pointer
         move or resize for example.
 
-        This request modifies windowing state and may only be made as part of a
-        windowing update sequence, see the river_window_manager_v1 description.
+        This request modifies window management state and may only be made as
+        part of a manage sequence, see the river_window_manager_v1 description.
       </description>
       <arg name="region" type="object" allow-null="true" interface="wl_region"/>
     </request>
@@ -1474,8 +1468,8 @@
         Warp the pointer to the given position in the compositor's logical
         coordinate space.
 
-        This request modifies windowing state and may only be made as part of a
-        windowing update sequence, see the river_window_manager_v1 description.
+        This request modifies window management state and may only be made as
+        part of a manage sequence, see the river_window_manager_v1 description.
       </description>
       <arg name="x" type="int"/>
       <arg name="y" type="int"/>
@@ -1505,8 +1499,7 @@
         configurable properties.
 
         The new key binding is not enabled until initial configuration is
-        completed and the enable request is made during a windowing update
-        sequence.
+        completed and the enable request is made during a manage sequence.
       </description>
       <arg name="id" type="new_id" interface="river_xkb_binding_v1"/>
       <arg name="keysym" type="uint" summary="an xkbcommon keysym"/>
@@ -1522,8 +1515,7 @@
         linux/input-event-codes.h header file (e.g. BTN_RIGHT).
 
         The new pointer binding is not enabled until initial configuration is
-        completed and the enable request is made during a windowing update
-        sequence.
+        completed and the enable request is made during a manage sequence.
       </description>
       <arg name="id" type="new_id" interface="river_pointer_binding_v1"/>
       <arg name="button" type="uint" summary="a Linux input event code"/>
@@ -1537,8 +1529,7 @@
       and receive events when the key binding is triggered.
 
       The new key binding is not enabled until initial configuration is
-      completed and the enable request is made during a windowing update
-      sequence.
+      completed and the enable request is made during a manage sequence.
 
       Normally, all key events are sent to the surface with keyboard focus by
       the compositor. Key events that trigger a key binding are not sent to the
@@ -1587,8 +1578,8 @@
         completed and the window manager wishes the key binding to be able to be
         triggered.
 
-        This request modifies windowing state and may only be made as part of a
-        windowing update sequence, see the river_window_manager_v1 description.
+        This request modifies window management state and may only be made as
+        part of a manage sequence, see the river_window_manager_v1 description.
       </description>
     </request>
 
@@ -1597,8 +1588,8 @@
         This request may be used to temporarily disable the key binding. It may
         be later re-enabled with the enable request.
 
-        This request modifies windowing state and may only be made as part of a
-        windowing update sequence, see the river_window_manager_v1 description.
+        This request modifies window management state and may only be made as
+        part of a manage sequence, see the river_window_manager_v1 description.
       </description>
     </request>
 
@@ -1607,15 +1598,15 @@
         This event indicates that the physical key triggering the binding has
         been pressed.
 
-        This event will be followed by an update_windowing_start event after all
-        other new state has been sent by the server.
+        This event will be followed by a manage_start event after all other new
+        state has been sent by the server.
 
-        The compositor should wait for the windowing update sequence to complete
-        before processing further input events. This allows the window manager
-        client to, for example, modify key bindings and keyboard focus without
-        racing against future input events. The window manager should of course
-        respond as soon as possible as the capacity of the compositor to buffer
-        incoming input events is finite.
+        The compositor should wait for the manage sequence to complete before
+        processing further input events. This allows the window manager client
+        to, for example, modify key bindings and keyboard focus without racing
+        against future input events. The window manager should of course respond
+        as soon as possible as the capacity of the compositor to buffer incoming
+        input events is finite.
       </description>
     </event>
 
@@ -1629,15 +1620,15 @@
         event. This event is sent when the "main" key is released, even if the
         modifiers have changed since the pressed event.
 
-        This event will be followed by an update_windowing_start event after all
-        other new state has been sent by the server.
+        This event will be followed by a manage_start event after all other new
+        state has been sent by the server.
 
-        The compositor should wait for the windowing update sequence to complete
-        before processing further input events. This allows the window manager
-        client to, for example, modify key bindings and keyboard focus without
-        racing against future input events. The window manager should of course
-        respond as soon as possible as the capacity of the compositor to buffer
-        incoming input events is finite.
+        The compositor should wait for the manage sequence to complete before
+        processing further input events. This allows the window manager client
+        to, for example, modify key bindings and keyboard focus without racing
+        against future input events. The window manager should of course respond
+        as soon as possible as the capacity of the compositor to buffer incoming
+        input events is finite.
       </description>
     </event>
   </interface>
@@ -1647,9 +1638,8 @@
       This object allows the window manager to configure a pointer binding and
       receive events when the binding is triggered.
 
-      The new key binding is not enabled until initial configuration is
-      completed and the enable request is made during a windowing update
-      sequence.
+      The new pointer binding is not enabled until initial configuration is
+      completed and the enable request is made during a manage sequence.
 
       Normally, all pointer button events are sent to the surface with pointer
       focus by the compositor. Pointer button events that trigger a pointer
@@ -1674,8 +1664,8 @@
         completed and the window manager wishes the pointer binding to be able
         to be triggered.
 
-        This request modifies windowing state and may only be made as part of a
-        windowing update sequence, see the river_window_manager_v1 description.
+        This request modifies window management state and may only be made as
+        part of a manage sequence, see the river_window_manager_v1 description.
       </description>
     </request>
 
@@ -1684,8 +1674,8 @@
         This request may be used to temporarily disable the pointer binding. It
         may be later re-enabled with the enable request.
 
-        This request modifies windowing state and may only be made as part of a
-        windowing update sequence, see the river_window_manager_v1 description.
+        This request modifies window management state and may only be made as
+        part of a manage sequence, see the river_window_manager_v1 description.
       </description>
     </request>
 
@@ -1694,15 +1684,15 @@
         This event indicates that the pointer button triggering the binding has
         been pressed.
 
-        This event will be followed by an update_windowing_start event after all
-        other new state has been sent by the server.
+        This event will be followed by a manage_start event after all other new
+        state has been sent by the server.
 
-        The compositor should wait for the windowing update sequence to complete
-        before processing further input events. This allows the window manager
-        client to, for example, modify key bindings and keyboard focus without
-        racing against future input events. The window manager should of course
-        respond as soon as possible as the capacity of the compositor to buffer
-        incoming input events is finite.
+        The compositor should wait for the manage sequence to complete before
+        processing further input events. This allows the window manager client
+        to, for example, modify key bindings and keyboard focus without racing
+        against future input events. The window manager should of course respond
+        as soon as possible as the capacity of the compositor to buffer incoming
+        input events is finite.
       </description>
     </event>
 
@@ -1713,18 +1703,18 @@
 
         Releasing the modifiers for the binding without releasing the pointer
         button does not trigger the release event. This event is sent when the
-        pointer button is released, even if the modifiers have changed since
-        the pressed event.
-
-        This event will be followed by an update_windowing_start event after all
-        other new state has been sent by the server.
-
-        The compositor should wait for the windowing update sequence to complete
-        before processing further input events. This allows the window manager
-        client to, for example, modify key bindings and keyboard focus without
-        racing against future input events. The window manager should of course
-        respond as soon as possible as the capacity of the compositor to buffer
-        incoming input events is finite.
+        pointer button is released, even if the modifiers have changed since the
+        pressed event.
+
+        This event will be followed by a manage_start event after all other new
+        state has been sent by the server.
+
+        The compositor should wait for the manage sequence to complete before
+        processing further input events. This allows the window manager client
+        to, for example, modify key bindings and keyboard focus without racing
+        against future input events. The window manager should of course respond
+        as soon as possible as the capacity of the compositor to buffer incoming
+        input events is finite.
       </description>
     </event>
   </interface>
diff --git a/river/Cursor.zig b/river/Cursor.zig
index 654c383..718885d 100644
--- a/river/Cursor.zig
+++ b/river/Cursor.zig
@@ -344,7 +344,7 @@ pub fn processMotionRelative(cursor: *Cursor, event: *const wlr.Pointer.event.Mo
 }
 
 fn updateHovered(cursor: *Cursor) void {
-    const old = cursor.seat.windowing_scheduled.window;
+    const old = cursor.seat.wm_scheduled.window;
     if (server.scene.at(cursor.wlr_cursor.x, cursor.wlr_cursor.y)) |result| {
         switch (result.data) {
             .window => |window| {
@@ -353,28 +353,28 @@ fn updateHovered(cursor: *Cursor) void {
                         // Exclude input regions of the toplevel that extend beyond the window
                         if (result.surface != null and result.surface.?.getRootSurface() == toplevel.wlr_toplevel.base.surface) {
                             if (window.box.containsPoint(cursor.wlr_cursor.x, cursor.wlr_cursor.y)) {
-                                cursor.seat.windowing_scheduled.window = window;
+                                cursor.seat.wm_scheduled.window = window;
                             }
                         } else {
-                            cursor.seat.windowing_scheduled.window = window;
+                            cursor.seat.wm_scheduled.window = window;
                         }
                     },
-                    .xwayland => cursor.seat.windowing_scheduled.window = window,
+                    .xwayland => cursor.seat.wm_scheduled.window = window,
                     .none => {},
                 }
             },
-            .shell_surface, .lock_surface => cursor.seat.windowing_scheduled.window = null,
+            .shell_surface, .lock_surface => cursor.seat.wm_scheduled.window = null,
             .override_redirect => {
                 assert(build_options.xwayland);
                 assert(server.xwayland != null);
-                cursor.seat.windowing_scheduled.window = null;
+                cursor.seat.wm_scheduled.window = null;
             },
         }
     } else {
-        cursor.seat.windowing_scheduled.window = null;
+        cursor.seat.wm_scheduled.window = null;
     }
 
-    if (cursor.seat.windowing_scheduled.window != old) {
+    if (cursor.seat.wm_scheduled.window != old) {
         server.wm.dirtyWindowing();
     }
 }
@@ -502,11 +502,11 @@ pub fn processAxis(cursor: *Cursor, event: *const wlr.Pointer.event.Axis) void {
 fn interact(cursor: Cursor, result: Scene.AtResult) void {
     switch (result.data) {
         .window => |window| {
-            cursor.seat.windowing_scheduled.interaction = .{ .window = window };
+            cursor.seat.wm_scheduled.interaction = .{ .window = window };
             server.wm.dirtyWindowing();
         },
         .shell_surface => |shell_surface| {
-            cursor.seat.windowing_scheduled.interaction = .{ .shell_surface = shell_surface };
+            cursor.seat.wm_scheduled.interaction = .{ .shell_surface = shell_surface };
             server.wm.dirtyWindowing();
         },
         .lock_surface => |lock_surface| {
diff --git a/river/Decoration.zig b/river/Decoration.zig
index 32086e1..ee2c14c 100644
--- a/river/Decoration.zig
+++ b/river/Decoration.zig
@@ -152,7 +152,7 @@ fn commit(wlr_surface: *wlr.Surface) callconv(.C) void {
     }
 }
 
-pub fn updateRenderingFinish(decoration: *Decoration) void {
+pub fn renderFinish(decoration: *Decoration) void {
     const rendering_requested = &decoration.rendering_requested;
     if (rendering_requested.sync_next_commit) {
         rendering_requested.sync_next_commit = false;
diff --git a/river/Output.zig b/river/Output.zig
index 0c9215f..9e27446 100644
--- a/river/Output.zig
+++ b/river/Output.zig
@@ -163,9 +163,9 @@ gamma_dirty: bool = false,
 /// Root.outputs
 link: wl.list.Link,
 
-/// State to be sent to the wm in the next windowing update sequence.
+/// State to be sent to the wm in the next manage sequence.
 scheduled: State,
-/// State sent to the wm in the latest windowing update sequence.
+/// State sent to the wm in the latest manage sequence.
 sent: State,
 link_sent: wl.list.Link,
 /// State applied to the wlr_output and rendered.
@@ -261,7 +261,7 @@ fn handleBind(listener: *wl.Listener(*wlr.Output.event.Bind), event: *wlr.Output
     }
 }
 
-pub fn updateWindowingStart(output: *Output) void {
+pub fn manageStart(output: *Output) void {
     switch (output.scheduled.state) {
         .enabled, .disabled_soft => {
             if (server.wm.object) |wm_v1| {
@@ -308,7 +308,7 @@ pub fn updateWindowingStart(output: *Output) void {
             output.sent = output.scheduled;
 
             output.link_sent.remove();
-            server.wm.windowing_sent.outputs.append(output);
+            server.wm.wm_sent.outputs.append(output);
         },
         .disabled_hard, .destroying => {
             if (output.object) |output_v1| {
diff --git a/river/OutputManager.zig b/river/OutputManager.zig
index f9f37e6..391e7fa 100644
--- a/river/OutputManager.zig
+++ b/river/OutputManager.zig
@@ -156,11 +156,11 @@ fn handleManagerApply(_: *wl.Listener(*wlr.OutputConfigurationV1), config: *wlr.
         };
     }
 
-    if (server.wm.windowing_scheduled.output_config) |old| {
+    if (server.wm.wm_scheduled.output_config) |old| {
         old.sendFailed();
         old.destroy();
     }
-    server.wm.windowing_scheduled.output_config = config;
+    server.wm.wm_scheduled.output_config = config;
 
     server.wm.dirtyWindowing();
 }
@@ -254,7 +254,7 @@ pub fn commitOutputState(om: *OutputManager) void {
     const wm = &server.wm;
 
     {
-        var it = wm.windowing_sent.outputs.iterator(.forward);
+        var it = wm.wm_sent.outputs.iterator(.forward);
         while (it.next()) |output| {
             const wlr_output = output.wlr_output orelse continue;
             switch (output.sent.state) {
@@ -275,7 +275,7 @@ pub fn commitOutputState(om: *OutputManager) void {
     server.input_manager.reconfigureDevices();
 
     const need_modeset = blk: {
-        var it = wm.windowing_sent.outputs.iterator(.forward);
+        var it = wm.wm_sent.outputs.iterator(.forward);
         while (it.next()) |output| {
             const wlr_output = output.wlr_output orelse continue;
 
@@ -309,7 +309,7 @@ pub fn commitOutputState(om: *OutputManager) void {
         defer for (states.items) |*s| s.base.finish();
 
         {
-            var it = wm.windowing_sent.outputs.iterator(.forward);
+            var it = wm.wm_sent.outputs.iterator(.forward);
             while (it.next()) |output| {
                 const wlr_output = output.wlr_output orelse continue;
                 const state = states.addOne() catch {
@@ -332,15 +332,15 @@ pub fn commitOutputState(om: *OutputManager) void {
             log.err("failed to prepare new output configuration", .{});
             // TODO search for a working fallback
 
-            if (wm.windowing_sent.output_config) |config| {
+            if (wm.wm_sent.output_config) |config| {
                 config.sendFailed();
                 config.destroy();
-                wm.windowing_sent.output_config = null;
+                wm.wm_sent.output_config = null;
             }
 
             {
                 // Revert to last working state on failure
-                var it = wm.windowing_sent.outputs.iterator(.forward);
+                var it = wm.wm_sent.outputs.iterator(.forward);
                 while (it.next()) |output| {
                     output.scheduled = output.current;
                     output.sent = output.current;
@@ -362,15 +362,15 @@ pub fn commitOutputState(om: *OutputManager) void {
         if (!server.backend.commit(states.items)) {
             log.err("failed to commit new output configuration", .{});
 
-            if (wm.windowing_sent.output_config) |config| {
+            if (wm.wm_sent.output_config) |config| {
                 config.sendFailed();
                 config.destroy();
-                wm.windowing_sent.output_config = null;
+                wm.wm_sent.output_config = null;
             }
 
             {
                 // Revert to last working state on failure
-                var it = wm.windowing_sent.outputs.iterator(.forward);
+                var it = wm.wm_sent.outputs.iterator(.forward);
                 while (it.next()) |output| {
                     output.scheduled = output.current;
                     output.sent = output.current;
@@ -383,14 +383,14 @@ pub fn commitOutputState(om: *OutputManager) void {
         swapchain_manager.apply();
     }
 
-    if (wm.windowing_sent.output_config) |config| {
+    if (wm.wm_sent.output_config) |config| {
         config.sendSucceeded();
         config.destroy();
-        wm.windowing_sent.output_config = null;
+        wm.wm_sent.output_config = null;
     }
 
     {
-        var it = wm.windowing_sent.outputs.iterator(.forward);
+        var it = wm.wm_sent.outputs.iterator(.forward);
         while (it.next()) |output| {
             output.current = output.sent;
 
diff --git a/river/PointerBinding.zig b/river/PointerBinding.zig
index c90bf88..bbc8816 100644
--- a/river/PointerBinding.zig
+++ b/river/PointerBinding.zig
@@ -37,14 +37,14 @@ object: *river.PointerBindingV1,
 button: u32,
 modifiers: river.SeatV1.Modifiers,
 
-windowing_scheduled: struct {
+wm_scheduled: struct {
     state_change: enum {
         none,
         pressed,
         released,
     } = .none,
 } = .{},
-windowing_requested: struct {
+wm_requested: struct {
     enabled: bool = false,
 } = .{},
 
@@ -110,11 +110,11 @@ fn handleRequest(
         .destroy => pointer_binding_v1.destroy(),
         .enable => {
             if (!server.wm.ensureWindowing()) return;
-            binding.windowing_requested.enabled = true;
+            binding.wm_requested.enabled = true;
         },
         .disable => {
             if (!server.wm.ensureWindowing()) return;
-            binding.windowing_requested.enabled = false;
+            binding.wm_requested.enabled = false;
         },
     }
 }
@@ -123,8 +123,8 @@ pub fn pressed(binding: *PointerBinding) void {
     assert(!binding.sent_pressed);
     // Input event processing should not continue after a press/release event
     // until that event is sent to the window manager in an update and acked.
-    assert(binding.windowing_scheduled.state_change == .none);
-    binding.windowing_scheduled.state_change = .pressed;
+    assert(binding.wm_scheduled.state_change == .none);
+    binding.wm_scheduled.state_change = .pressed;
     server.wm.dirtyWindowing();
 }
 
@@ -132,8 +132,8 @@ pub fn released(binding: *PointerBinding) void {
     assert(binding.sent_pressed);
     // Input event processing should not continue after a press/release event
     // until that event is sent to the window manager in an update and acked.
-    assert(binding.windowing_scheduled.state_change == .none);
-    binding.windowing_scheduled.state_change = .released;
+    assert(binding.wm_scheduled.state_change == .none);
+    binding.wm_scheduled.state_change = .released;
     server.wm.dirtyWindowing();
 }
 
@@ -142,7 +142,7 @@ pub fn match(
     button: u32,
     modifiers: wlr.Keyboard.ModifierMask,
 ) bool {
-    if (!binding.windowing_requested.enabled) return false;
+    if (!binding.wm_requested.enabled) return false;
 
     return button == binding.button and
         @as(u32, @bitCast(modifiers)) == @as(u32, @bitCast(binding.modifiers));
diff --git a/river/Seat.zig b/river/Seat.zig
index 99ee892..b24bde3 100644
--- a/river/Seat.zig
+++ b/river/Seat.zig
@@ -111,23 +111,23 @@ object: ?*river.SeatV1 = null,
 
 event_queue: EventQueue = EventQueue.init(),
 
-/// State to be sent to the wm in the next windowing update sequence.
-windowing_scheduled: struct {
+/// State to be sent to the wm in the next manage sequence.
+wm_scheduled: struct {
     /// The window entered/hovered by the pointer, if any
     window: ?*Window = null,
     /// The window clicked on, touched, etc.
     interaction: WmFocus = .none,
 } = .{},
 
-/// State sent to the wm in the latest windowing update sequence.
-windowing_sent: struct {
+/// State sent to the wm in the latest manage sequence.
+wm_sent: struct {
     /// The window entered/hovered by the pointer, if any
     window: ?*Window = null,
 } = .{},
 link_sent: wl.list.Link,
 
 /// Windowing state requested by the wm.
-windowing_requested: struct {
+wm_requested: struct {
     focus: WmFocus = .none,
     op: union(enum) {
         none,
@@ -246,10 +246,10 @@ pub fn queueEvent(seat: *Seat, event: Event) void {
 pub fn processEvents(seat: *Seat) void {
     assert(server.wm.state == .idle);
 
-    // Only process events while there is no new windowing state to be sent to the window manager.
+    // Only process events while there is no new state to be sent to the window manager.
     // The window manager might decide to change focus or redefine keyboard/pointer bindings
-    // in response to the windowing update, which can affect further processing of events.
-    while (!server.wm.windowing_scheduled.dirty) {
+    // in response, which can affect further processing of events.
+    while (!server.wm.wm_scheduled.dirty) {
         assert(server.wm.state == .idle);
 
         const event = seat.event_queue.readItem() orelse break;
@@ -284,7 +284,7 @@ pub fn processEvents(seat: *Seat) void {
     }
 }
 
-pub fn updateWindowingStart(seat: *Seat) void {
+pub fn manageStart(seat: *Seat) void {
     if (seat.destroying) {
         if (seat.object) |seat_v1| {
             seat_v1.sendRemoved();
@@ -308,7 +308,7 @@ pub fn updateWindowingStart(seat: *Seat) void {
             wm_v1.sendSeat(seat_v1);
 
             seat.link_sent.remove();
-            server.wm.windowing_sent.seats.append(seat);
+            server.wm.wm_sent.seats.append(seat);
 
             break :blk seat_v1;
         };
@@ -326,36 +326,36 @@ pub fn updateWindowingStart(seat: *Seat) void {
         }
 
         if (new) {
-            if (seat.windowing_scheduled.window) |window| {
+            if (seat.wm_scheduled.window) |window| {
                 if (window.object) |window_v1| {
                     seat_v1.sendPointerEnter(window_v1);
-                    seat.windowing_sent.window = seat.windowing_scheduled.window;
+                    seat.wm_sent.window = seat.wm_scheduled.window;
                 }
             }
-        } else if (seat.windowing_scheduled.window != seat.windowing_sent.window) {
-            if (seat.windowing_sent.window != null) {
+        } else if (seat.wm_scheduled.window != seat.wm_sent.window) {
+            if (seat.wm_sent.window != null) {
                 seat_v1.sendPointerLeave();
-                seat.windowing_sent.window = null;
+                seat.wm_sent.window = null;
             }
-            if (seat.windowing_scheduled.window) |window| {
+            if (seat.wm_scheduled.window) |window| {
                 if (window.object) |window_v1| {
                     seat_v1.sendPointerEnter(window_v1);
-                    seat.windowing_sent.window = window;
+                    seat.wm_sent.window = window;
                 }
             }
         }
 
-        switch (seat.windowing_scheduled.interaction) {
+        switch (seat.wm_scheduled.interaction) {
             .none => {},
             .window => |window| {
                 if (window.object) |window_v1| {
                     seat_v1.sendWindowInteraction(window_v1);
-                    seat.windowing_scheduled.interaction = .none;
+                    seat.wm_scheduled.interaction = .none;
                 }
             },
             .shell_surface => |shell_surface| {
                 seat_v1.sendShellSurfaceInteraction(shell_surface.object);
-                seat.windowing_scheduled.interaction = .none;
+                seat.wm_scheduled.interaction = .none;
             },
         }
 
@@ -366,7 +366,7 @@ pub fn updateWindowingStart(seat: *Seat) void {
         {
             var it = seat.xkb_bindings.iterator(.forward);
             while (it.next()) |binding| {
-                switch (binding.windowing_scheduled.state_change) {
+                switch (binding.wm_scheduled.state_change) {
                     .none => {},
                     .pressed => {
                         assert(!binding.sent_pressed);
@@ -379,13 +379,13 @@ pub fn updateWindowingStart(seat: *Seat) void {
                         binding.object.sendReleased();
                     },
                 }
-                binding.windowing_scheduled.state_change = .none;
+                binding.wm_scheduled.state_change = .none;
             }
         }
         {
             var it = seat.pointer_bindings.iterator(.forward);
             while (it.next()) |binding| {
-                switch (binding.windowing_scheduled.state_change) {
+                switch (binding.wm_scheduled.state_change) {
                     .none => {},
                     .pressed => {
                         assert(!binding.sent_pressed);
@@ -398,7 +398,7 @@ pub fn updateWindowingStart(seat: *Seat) void {
                         binding.object.sendReleased();
                     },
                 }
-                binding.windowing_scheduled.state_change = .none;
+                binding.wm_scheduled.state_change = .none;
             }
         }
     }
@@ -432,15 +432,15 @@ fn handleRequest(
             if (!server.wm.ensureWindowing()) return;
             const data = args.window.getUserData() orelse return;
             const window: *Window = @ptrCast(@alignCast(data));
-            seat.windowing_requested.focus = .{ .window = window };
+            seat.wm_requested.focus = .{ .window = window };
         },
         .focus_shell_surface => |args| {
             if (!server.wm.ensureWindowing()) return;
             const data = args.shell_surface.getUserData() orelse return;
             const shell_surface: *ShellSurface = @ptrCast(@alignCast(data));
-            seat.windowing_requested.focus = .{ .shell_surface = shell_surface };
+            seat.wm_requested.focus = .{ .shell_surface = shell_surface };
         },
-        .clear_focus => seat.windowing_requested.focus = .none,
+        .clear_focus => seat.wm_requested.focus = .none,
 
         .op_start_serial => {
             if (!server.wm.ensureWindowing()) return;
@@ -448,11 +448,11 @@ fn handleRequest(
         },
         .op_start_pointer => {
             if (!server.wm.ensureWindowing()) return;
-            seat.windowing_requested.op = .start_pointer;
+            seat.wm_requested.op = .start_pointer;
         },
         .op_end => {
             if (!server.wm.ensureWindowing()) return;
-            seat.windowing_requested.op = .end;
+            seat.wm_requested.op = .end;
         },
 
         .pointer_confine_to_region => {},
@@ -489,16 +489,16 @@ fn handleRequest(
     }
 }
 
-pub fn updateWindowingFinish(seat: *Seat) void {
+pub fn manageFinish(seat: *Seat) void {
     if (server.lock_manager.state != .unlocked) return;
 
-    switch (seat.windowing_requested.focus) {
+    switch (seat.wm_requested.focus) {
         .none => seat.focus(.none),
         .window => |window| seat.focus(.{ .window = window }),
         .shell_surface => |shell_surface| seat.focus(.{ .shell_surface = shell_surface }),
     }
 
-    switch (seat.windowing_requested.op) {
+    switch (seat.wm_requested.op) {
         .none => {},
         .start_pointer => if (seat.op == null) {
             log.debug("start seat op pointer", .{});
@@ -519,7 +519,7 @@ pub fn updateWindowingFinish(seat: *Seat) void {
             }
         },
     }
-    seat.windowing_requested.op = .none;
+    seat.wm_requested.op = .none;
 }
 
 pub fn focus(seat: *Seat, new_focus: Focus) void {
diff --git a/river/ShellSurface.zig b/river/ShellSurface.zig
index 338141c..0cf93a0 100644
--- a/river/ShellSurface.zig
+++ b/river/ShellSurface.zig
@@ -145,7 +145,7 @@ fn commit(wlr_surface: *wlr.Surface) callconv(.C) void {
     }
 }
 
-pub fn updateRenderingFinish(shell_surface: *ShellSurface) void {
+pub fn renderFinish(shell_surface: *ShellSurface) void {
     const rendering_requested = &shell_surface.rendering_requested;
     if (rendering_requested.sync_next_commit) {
         rendering_requested.sync_next_commit = false;
diff --git a/river/Window.zig b/river/Window.zig
index 82d215c..d63bbd7 100644
--- a/river/Window.zig
+++ b/river/Window.zig
@@ -83,7 +83,7 @@ pub const Configure = struct {
 
 /// The window management protocol object for this window
 /// Created after the window is ready to be configured.
-/// Lifetime is managed through windowing_scheduled.state
+/// Lifetime is managed through wm_scheduled.state
 object: ?*river.WindowV1 = null,
 node: WmNode,
 
@@ -122,8 +122,8 @@ destroying: bool = false,
 /// WindowManager.windows
 link: wl.list.Link,
 
-/// State to be sent to the wm in the next windowing update sequence.
-windowing_scheduled: struct {
+/// State to be sent to the wm in the next manage sequence.
+wm_scheduled: struct {
     state: enum {
         /// Indicates that there is currently no associated river_window_v1
         /// object.
@@ -147,16 +147,16 @@ windowing_scheduled: struct {
     dirty_title: bool = false,
 } = .{},
 
-/// State sent to the wm in the latest windowing update sequence.
+/// State sent to the wm in the latest manage sequence.
 /// This state is only kept around in order to avoid sending redundant events
 /// to the wm.
-windowing_sent: struct {
+wm_sent: struct {
     dimensions_hint: DimensionsHint = .{},
     decoration_hint: river.WindowV1.DecorationHint = .only_supports_csd,
 } = .{},
 
 /// Windowing state requested by the wm.
-windowing_requested: struct {
+wm_requested: struct {
     dimensions: ?struct {
         width: u31,
         height: u31,
@@ -180,7 +180,7 @@ configure_scheduled: Configure = .{},
 /// State sent to the window in the latest configure.
 configure_sent: Configure = .{},
 
-/// State to be sent to the wm in the next rendering update sequence.
+/// State to be sent to the wm in the next render sequence.
 rendering_scheduled: struct {
     /// Dimensions committed by the window.
     width: u31 = 0,
@@ -189,7 +189,7 @@ rendering_scheduled: struct {
     resend_dimensions: bool = false,
 } = .{},
 
-/// State sent to the wm in the latest rendering update sequence.
+/// State sent to the wm in the latest render sequence.
 rendering_sent: struct {
     width: u31 = 0,
     height: u31 = 0,
@@ -253,21 +253,21 @@ pub fn create(impl: Impl) error{OutOfMemory}!*Window {
     return window;
 }
 
-/// It's safe to destroy the window after we no longer need the saved buffers for frame perfection.
-/// We no longer need the saved buffers after the windowing update sequence in
-/// which the closed event was sent is completed and the following rendering update
-/// sequence is completed as well.
+/// It's safe to destroy the window after we no longer need the saved buffers
+/// for frame perfection. We no longer need the saved buffers after the manage
+/// sequence in which the closed event was sent is completed and the following
+/// render sequence is completed as well.
 pub fn destroy(window: *Window) void {
     assert(window.impl == .none);
     assert(!window.mapped);
 
-    // We can't assert(window.windowing_scheduled.state != .ready) since the client may
+    // We can't assert(window.wm_scheduled.state != .ready) since the client may
     // have exited after making its empty initial commit but before the surface
     // is mapped.
-    switch (window.windowing_scheduled.state) {
+    switch (window.wm_scheduled.state) {
         .init => {},
         .closing, .ready => {
-            window.windowing_scheduled.state = .closing;
+            window.wm_scheduled.state = .closing;
             server.wm.dirtyWindowing();
             return;
         },
@@ -280,11 +280,11 @@ pub fn destroy(window: *Window) void {
             if (seat.focused == .window and seat.focused.window == window) {
                 seat.focus(.none);
             }
-            if (seat.windowing_scheduled.window == window) {
-                seat.windowing_scheduled.window = null;
+            if (seat.wm_scheduled.window == window) {
+                seat.wm_scheduled.window = null;
             }
-            if (seat.windowing_sent.window == window) {
-                seat.windowing_sent.window = null;
+            if (seat.wm_sent.window == window) {
+                seat.wm_sent.window = null;
             }
         }
     }
@@ -305,8 +305,8 @@ pub fn destroy(window: *Window) void {
 }
 
 pub fn setDimensionsHint(window: *Window, hint: DimensionsHint) void {
-    window.windowing_scheduled.dimensions_hint = hint;
-    if (!meta.eql(window.windowing_sent.dimensions_hint, hint)) {
+    window.wm_scheduled.dimensions_hint = hint;
+    if (!meta.eql(window.wm_sent.dimensions_hint, hint)) {
         server.wm.dirtyWindowing();
     }
 }
@@ -324,30 +324,30 @@ pub fn setDimensions(window: *Window, width: u31, height: u31) void {
 }
 
 pub fn setDecorationHint(window: *Window, hint: river.WindowV1.DecorationHint) void {
-    window.windowing_scheduled.decoration_hint = hint;
-    if (hint != window.windowing_sent.decoration_hint) {
+    window.wm_scheduled.decoration_hint = hint;
+    if (hint != window.wm_sent.decoration_hint) {
         server.wm.dirtyWindowing();
     }
 }
 
 pub fn setFullscreenRequested(window: *Window, fullscreen_requested: bool) void {
     if (fullscreen_requested) {
-        window.windowing_scheduled.fullscreen_requested = .fullscreen;
+        window.wm_scheduled.fullscreen_requested = .fullscreen;
     } else {
-        window.windowing_scheduled.fullscreen_requested = .exit;
+        window.wm_scheduled.fullscreen_requested = .exit;
     }
     server.wm.dirtyWindowing();
 }
 
-/// Send dirty windowing state as part of a windowing update sequence.
-pub fn updateWindowingStart(window: *Window) void {
-    switch (window.windowing_scheduled.state) {
+/// Send dirty state as part of a manage sequence.
+pub fn manageStart(window: *Window) void {
+    switch (window.wm_scheduled.state) {
         .init => {},
         .closing => {
             window.initialized = false;
-            window.windowing_scheduled.state = .init;
-            window.windowing_sent = .{};
-            window.windowing_requested = .{};
+            window.wm_scheduled.state = .init;
+            window.wm_sent = .{};
+            window.wm_requested = .{};
             window.rendering_sent = .{};
             window.rendering_requested = .{};
 
@@ -375,8 +375,8 @@ pub fn updateWindowingStart(window: *Window) void {
             };
             errdefer comptime unreachable;
 
-            const pending = &window.windowing_scheduled;
-            const sent = &window.windowing_sent;
+            const pending = &window.wm_scheduled;
+            const sent = &window.wm_sent;
 
             // XXX send all dirty pending state
             if (new or !meta.eql(pending.dimensions_hint, sent.dimensions_hint)) {
@@ -389,7 +389,7 @@ pub fn updateWindowingStart(window: *Window) void {
                 sent.dimensions_hint = pending.dimensions_hint;
             }
             if (new or pending.decoration_hint != sent.decoration_hint) {
-                window_v1.sendDecorationHint(window.windowing_scheduled.decoration_hint);
+                window_v1.sendDecorationHint(window.wm_scheduled.decoration_hint);
                 sent.decoration_hint = pending.decoration_hint;
             }
             switch (pending.fullscreen_requested) {
@@ -449,7 +449,7 @@ fn handleRequest(
     window: *Window,
 ) void {
     assert(window.object == window_v1);
-    const windowing_requested = &window.windowing_requested;
+    const wm_requested = &window.wm_requested;
     const rendering_requested = &window.rendering_requested;
     switch (request) {
         .destroy => {
@@ -458,7 +458,7 @@ fn handleRequest(
         },
         .close => {
             if (!server.wm.ensureWindowing()) return;
-            windowing_requested.close = true;
+            wm_requested.close = true;
         },
         .get_node => |args| {
             if (window.node.object != null) {
@@ -472,7 +472,7 @@ fn handleRequest(
             if (args.width < 0 or args.height < 0) {
                 // XXX send protocol error
             }
-            windowing_requested.dimensions = .{
+            wm_requested.dimensions = .{
                 .width = @intCast(args.width),
                 .height = @intCast(args.height),
             };
@@ -487,11 +487,11 @@ fn handleRequest(
         },
         .use_ssd => {
             if (!server.wm.ensureWindowing()) return;
-            windowing_requested.ssd = true;
+            wm_requested.ssd = true;
         },
         .use_csd => {
             if (!server.wm.ensureWindowing()) return;
-            windowing_requested.ssd = false;
+            wm_requested.ssd = false;
         },
         .set_borders => |args| {
             if (!server.wm.ensureRendering()) return;
@@ -509,7 +509,7 @@ fn handleRequest(
         },
         .set_tiled => |args| {
             if (!server.wm.ensureWindowing()) return;
-            windowing_requested.tiled = args.edges;
+            wm_requested.tiled = args.edges;
         },
         inline .get_decoration_above, .get_decoration_below => |args, req| {
             const above = req == .get_decoration_above;
@@ -536,43 +536,43 @@ fn handleRequest(
         },
         .inform_resize_start => {
             if (!server.wm.ensureWindowing()) return;
-            windowing_requested.resizing = true;
+            wm_requested.resizing = true;
         },
         .inform_resize_end => {
             if (!server.wm.ensureWindowing()) return;
-            windowing_requested.resizing = false;
+            wm_requested.resizing = false;
         },
         .set_capabilities => |args| {
             if (!server.wm.ensureWindowing()) return;
-            windowing_requested.capabilities = args.caps;
+            wm_requested.capabilities = args.caps;
         },
         .inform_maximized => {
             if (!server.wm.ensureWindowing()) return;
-            windowing_requested.maximized = true;
+            wm_requested.maximized = true;
         },
         .inform_unmaximized => {
             if (!server.wm.ensureWindowing()) return;
-            windowing_requested.maximized = false;
+            wm_requested.maximized = false;
         },
         .fullscreen => {
             if (!server.wm.ensureWindowing()) return;
-            windowing_requested.fullscreen = true;
+            wm_requested.fullscreen = true;
         },
         .exit_fullscreen => {
             if (!server.wm.ensureWindowing()) return;
-            windowing_requested.fullscreen = false;
+            wm_requested.fullscreen = false;
         },
     }
 }
 
-/// Applies windowing state from the window manager client  and sends a configure
+/// Applies window management state from the window manager and sends a configure
 /// to the window if necessary.
 /// Returns true if the configure should be waited for by the transaction system.
-pub fn updateWindowingFinish(window: *Window) bool {
-    const windowing_requested = &window.windowing_requested;
+pub fn manageFinish(window: *Window) bool {
+    const wm_requested = &window.wm_requested;
 
     if (!window.initialized) {
-        if (windowing_requested.dimensions != null) {
+        if (wm_requested.dimensions != null) {
             window.initialized = true;
         } else {
             return false;
@@ -581,23 +581,23 @@ pub fn updateWindowingFinish(window: *Window) bool {
 
     assert(!window.destroying);
 
-    window.configure_scheduled.ssd = windowing_requested.ssd;
-    window.configure_scheduled.tiled = windowing_requested.tiled;
-    window.configure_scheduled.capabilities = windowing_requested.capabilities;
-    window.configure_scheduled.resizing = windowing_requested.resizing;
-    window.configure_scheduled.maximized = windowing_requested.maximized;
-    window.configure_scheduled.fullscreen = windowing_requested.fullscreen;
+    window.configure_scheduled.ssd = wm_requested.ssd;
+    window.configure_scheduled.tiled = wm_requested.tiled;
+    window.configure_scheduled.capabilities = wm_requested.capabilities;
+    window.configure_scheduled.resizing = wm_requested.resizing;
+    window.configure_scheduled.maximized = wm_requested.maximized;
+    window.configure_scheduled.fullscreen = wm_requested.fullscreen;
 
-    if (windowing_requested.close) {
+    if (wm_requested.close) {
         window.close();
     }
 
     {
         window.configure_scheduled.activated = false;
-        var it = server.wm.windowing_sent.seats.iterator(.forward);
+        var it = server.wm.wm_sent.seats.iterator(.forward);
         while (it.next()) |seat| {
-            if (seat.windowing_requested.focus == .window and
-                seat.windowing_requested.focus.window == window)
+            if (seat.wm_requested.focus == .window and
+                seat.wm_requested.focus.window == window)
             {
                 window.configure_scheduled.activated = true;
                 break;
@@ -605,10 +605,10 @@ pub fn updateWindowingFinish(window: *Window) bool {
         }
     }
 
-    if (windowing_requested.dimensions) |dimensions| {
+    if (wm_requested.dimensions) |dimensions| {
         window.configure_scheduled.width = dimensions.width;
         window.configure_scheduled.height = dimensions.height;
-        windowing_requested.dimensions = null;
+        wm_requested.dimensions = null;
         window.rendering_scheduled.resend_dimensions = true;
     }
 
@@ -626,7 +626,7 @@ pub fn updateWindowingFinish(window: *Window) bool {
     return track_configure;
 }
 
-pub fn updateRenderingStart(window: *Window) void {
+pub fn renderStart(window: *Window) void {
     switch (window.impl) {
         .toplevel => |*toplevel| {
             switch (toplevel.configure_state) {
@@ -659,7 +659,7 @@ pub fn updateRenderingStart(window: *Window) void {
                     toplevel.configure_state = .idle;
                 },
                 // A timed_out or timed_out_acked value is possible in the case of a
-                // windowing update followed by two rendering updates for example.
+                // manage sequence followed by two render sequences for example.
                 .idle, .timed_out, .timed_out_acked => {},
             }
             window.rendering_scheduled.width = @intCast(toplevel.geometry.width);
@@ -689,7 +689,7 @@ pub fn updateRenderingStart(window: *Window) void {
     sent.height = scheduled.height;
 }
 
-pub fn updateRenderingFinish(window: *Window) void {
+pub fn renderFinish(window: *Window) void {
     window.tree.node.setEnabled(!window.rendering_requested.hidden);
     window.popup_tree.node.setEnabled(!window.rendering_requested.hidden);
 
@@ -765,7 +765,7 @@ pub fn updateRenderingFinish(window: *Window) void {
 
     inline for (.{ &window.decorations_above, &window.decorations_below }) |decorations| {
         var it = decorations.iterator(.forward);
-        while (it.next()) |decoration| decoration.updateRenderingFinish();
+        while (it.next()) |decoration| decoration.renderFinish();
     }
 }
 
@@ -840,17 +840,17 @@ pub fn unmap(window: *Window) void {
     assert(window.mapped and !window.destroying);
     window.mapped = false;
 
-    assert(window.windowing_scheduled.state != .closing);
-    window.windowing_scheduled.state = .closing;
+    assert(window.wm_scheduled.state != .closing);
+    window.wm_scheduled.state = .closing;
     server.wm.dirtyWindowing();
 }
 
 pub fn notifyTitle(window: *Window) void {
-    window.windowing_scheduled.dirty_title = true;
+    window.wm_scheduled.dirty_title = true;
     server.wm.dirtyWindowing();
 }
 
 pub fn notifyAppId(window: *Window) void {
-    window.windowing_scheduled.dirty_app_id = true;
+    window.wm_scheduled.dirty_app_id = true;
     server.wm.dirtyWindowing();
 }
diff --git a/river/WindowManager.zig b/river/WindowManager.zig
index b353a69..1f1895e 100644
--- a/river/WindowManager.zig
+++ b/river/WindowManager.zig
@@ -42,35 +42,35 @@ object: ?*river.WindowManagerV1 = null,
 
 state: union(enum) {
     idle,
-    /// Waiting on the window manager client to finish the windowing phase of the update sequence.
-    update_windowing,
+    /// Waiting on the window manager client to send manage_finish.
+    manage,
     /// The number of configures sent that have not yet been acked
     inflight_configures: u32,
-    /// Waiting on the window manager client to finish the rendering phase of the update sequence.
-    update_rendering,
+    /// Waiting on the window manager client to send render_finish.
+    render,
 } = .idle,
 
 windows: wl.list.Head(Window, .link),
 
-/// Windowing state to be sent to the wm in the next windowing update sequence.
-windowing_scheduled: struct {
-    /// Windowing state has been modified since the last windowing update sequence.
+/// State to be sent to the wm in the next manage sequence.
+wm_scheduled: struct {
+    /// State has been modified since the last manage sequence.
     dirty: bool = false,
 
     output_config: ?*wlr.OutputConfigurationV1 = null,
 } = .{},
 
 /// State sent to the wm in the latest update sequence.
-windowing_sent: struct {
+wm_sent: struct {
     outputs: wl.list.Head(Output, .link_sent),
     output_config: ?*wlr.OutputConfigurationV1 = null,
 
     seats: wl.list.Head(Seat, .link_sent),
 },
 
-/// Rendering state to be sent to the wm in the next rendering update sequence.
+/// Rendering state to be sent to the wm in the next render sequence.
 rendering_scheduled: struct {
-    /// Rendering state has been modified since the last rendering update sequence.
+    /// Rendering state has been modified since the last render sequence.
     dirty: bool = false,
 } = .{},
 
@@ -91,7 +91,7 @@ pub fn init(wm: *WindowManager) !void {
     wm.* = .{
         .global = try wl.Global.create(server.wl_server, river.WindowManagerV1, 1, *WindowManager, wm, bind),
         .windows = undefined,
-        .windowing_sent = .{
+        .wm_sent = .{
             .outputs = undefined,
             .seats = undefined,
         },
@@ -101,8 +101,8 @@ pub fn init(wm: *WindowManager) !void {
         .timeout = timeout,
     };
     wm.windows.init();
-    wm.windowing_sent.outputs.init();
-    wm.windowing_sent.seats.init();
+    wm.wm_sent.outputs.init();
+    wm.wm_sent.seats.init();
     wm.rendering_requested.list.init();
 
     server.wl_server.addDestroyListener(&wm.server_destroy);
@@ -147,8 +147,8 @@ fn handleDestroy(_: *river.WindowManagerV1, wm: *WindowManager) void {
     switch (wm.state) {
         .idle => {},
         .inflight_configures => {},
-        .update_windowing => wm.updateWindowingFinish(),
-        .update_rendering => wm.updateRenderingFinish(),
+        .manage => wm.manageFinish(),
+        .render => wm.renderFinish(),
     }
 }
 
@@ -168,24 +168,24 @@ fn handleRequest(
             // XXX send protocol error
             wm_v1.destroy();
         },
-        .update_windowing_finish => {
-            if (wm.state != .update_windowing) {
-                wm_v1.postError(.update_sequence_order,
-                    \\update_windowing_finish request does not match update_windowing_start
+        .manage_finish => {
+            if (wm.state != .manage) {
+                wm_v1.postError(.sequence_order,
+                    \\manage_finish request does not match manage_start
                 );
                 return;
             }
-            wm.updateWindowingFinish();
+            wm.manageFinish();
         },
-        .update_windowing_dirty => wm.dirtyWindowing(),
-        .update_rendering_finish => {
-            if (wm.state != .update_rendering) {
-                wm_v1.postError(.update_sequence_order,
-                    \\update_rendering_finish request does not match update_rendering_start
+        .manage_dirty => wm.dirtyWindowing(),
+        .render_finish => {
+            if (wm.state != .render) {
+                wm_v1.postError(.sequence_order,
+                    \\render_finish request does not match render_start
                 );
                 return;
             }
-            wm.updateRenderingFinish();
+            wm.renderFinish();
         },
         .get_shell_surface => |args| {
             const surface = wlr.Surface.fromWlSurface(args.surface);
@@ -205,10 +205,10 @@ fn handleRequest(
 
 pub fn ensureWindowing(wm: *WindowManager) bool {
     switch (wm.state) {
-        .update_windowing => return true,
-        .idle, .inflight_configures, .update_rendering => {
+        .manage => return true,
+        .idle, .inflight_configures, .render => {
             if (wm.object) |wm_v1| {
-                wm_v1.postError(.update_sequence_order, "invalid modification of windowing state");
+                wm_v1.postError(.sequence_order, "invalid modification of window management state");
             }
             return false;
         },
@@ -217,10 +217,10 @@ pub fn ensureWindowing(wm: *WindowManager) bool {
 
 pub fn ensureRendering(wm: *WindowManager) bool {
     switch (wm.state) {
-        .update_windowing, .inflight_configures, .update_rendering => return true,
+        .manage, .inflight_configures, .render => return true,
         .idle => {
             if (wm.object) |wm_v1| {
-                wm_v1.postError(.update_sequence_order, "invalid modification of rendering state");
+                wm_v1.postError(.sequence_order, "invalid modification of rendering state");
             }
             return false;
         },
@@ -228,7 +228,7 @@ pub fn ensureRendering(wm: *WindowManager) bool {
 }
 
 pub fn dirtyWindowing(wm: *WindowManager) void {
-    wm.windowing_scheduled.dirty = true;
+    wm.wm_scheduled.dirty = true;
 
     if (wm.dirty_idle == null) {
         const event_loop = server.wl_server.getEventLoop();
@@ -252,67 +252,67 @@ pub fn dirtyRendering(wm: *WindowManager) void {
 }
 
 fn dirtyIdle(wm: *WindowManager) void {
-    assert(wm.windowing_scheduled.dirty or wm.rendering_scheduled.dirty);
+    assert(wm.wm_scheduled.dirty or wm.rendering_scheduled.dirty);
     wm.dirty_idle = null;
     switch (wm.state) {
         .idle => {
             if (wm.rendering_scheduled.dirty) {
-                wm.updateRenderingStart();
+                wm.renderStart();
             } else {
-                wm.updateWindowingStart();
+                wm.manageStart();
             }
         },
-        .update_windowing, .inflight_configures, .update_rendering => {},
+        .manage, .inflight_configures, .render => {},
     }
 }
 
-fn updateWindowingStart(wm: *WindowManager) void {
+fn manageStart(wm: *WindowManager) void {
     assert(wm.state == .idle);
-    assert(wm.windowing_scheduled.dirty);
+    assert(wm.wm_scheduled.dirty);
 
-    log.debug("update windowing start", .{});
+    log.debug("manage sequence start", .{});
 
     server.om.autoLayout();
     {
         var it = server.om.outputs.safeIterator(.forward);
-        while (it.next()) |output| output.updateWindowingStart();
+        while (it.next()) |output| output.manageStart();
     }
 
-    assert(wm.windowing_sent.output_config == null);
-    wm.windowing_sent.output_config = wm.windowing_scheduled.output_config;
-    wm.windowing_scheduled.output_config = null;
+    assert(wm.wm_sent.output_config == null);
+    wm.wm_sent.output_config = wm.wm_scheduled.output_config;
+    wm.wm_scheduled.output_config = null;
 
     {
         var it = wm.windows.safeIterator(.forward);
-        while (it.next()) |window| window.updateWindowingStart();
+        while (it.next()) |window| window.manageStart();
     }
 
     {
         var it = server.input_manager.seats.safeIterator(.forward);
-        while (it.next()) |seat| seat.updateWindowingStart();
+        while (it.next()) |seat| seat.manageStart();
     }
 
-    wm.windowing_scheduled.dirty = false;
-    wm.state = .update_windowing;
+    wm.wm_scheduled.dirty = false;
+    wm.state = .manage;
 
     if (wm.object) |wm_v1| {
         // TODO kill the WM on a very long timeout?
-        wm_v1.sendUpdateWindowingStart();
+        wm_v1.sendManageStart();
     } else {
-        wm.updateWindowingFinish();
+        wm.manageFinish();
     }
 }
 
-pub fn updateWindowingFinish(wm: *WindowManager) void {
-    assert(wm.state == .update_windowing);
+pub fn manageFinish(wm: *WindowManager) void {
+    assert(wm.state == .manage);
 
-    log.debug("update windowing finish", .{});
+    log.debug("manage sequence finish", .{});
 
     {
-        // Order is important here, Seat.updateWindowingFinish() must be called
-        // before Window.updateWindowingFinish().
-        var it = wm.windowing_sent.seats.iterator(.forward);
-        while (it.next()) |seat| seat.updateWindowingFinish();
+        // Order is important here, Seat.manageFinish() must be called
+        // before Window.manageFinish().
+        var it = wm.wm_sent.seats.iterator(.forward);
+        while (it.next()) |seat| seat.manageFinish();
     }
 
     wm.state = .{ .inflight_configures = 0 };
@@ -321,7 +321,7 @@ pub fn updateWindowingFinish(wm: *WindowManager) void {
         while (it.next()) |node| {
             switch (node.get()) {
                 .window => |window| {
-                    if (window.updateWindowingFinish()) {
+                    if (window.manageFinish()) {
                         wm.state.inflight_configures += 1;
                     }
                 },
@@ -335,7 +335,7 @@ pub fn updateWindowingFinish(wm: *WindowManager) void {
     if (wm.state.inflight_configures > 0) {
         wm.startTimeoutTimer();
     } else {
-        wm.updateRenderingStart();
+        wm.renderStart();
     }
 }
 
@@ -356,7 +356,7 @@ fn handleTimeout(wm: *WindowManager) c_int {
     assert(wm.state.inflight_configures > 0);
     wm.state.inflight_configures = 0;
 
-    wm.updateRenderingStart();
+    wm.renderStart();
 
     return 0;
 }
@@ -365,51 +365,51 @@ pub fn notifyConfigured(wm: *WindowManager) void {
     wm.state.inflight_configures -= 1;
     if (wm.state.inflight_configures == 0) {
         wm.cancelTimeoutTimer();
-        wm.updateRenderingStart();
+        wm.renderStart();
     }
 }
 
-fn updateRenderingStart(wm: *WindowManager) void {
+fn renderStart(wm: *WindowManager) void {
     assert(wm.state == .idle or wm.state.inflight_configures == 0);
 
-    log.debug("update rendering start", .{});
+    log.debug("render sequence start", .{});
 
     {
         var it = wm.rendering_requested.list.iterator(.forward);
         while (it.next()) |node| {
             switch (node.get()) {
-                .window => |window| window.updateRenderingStart(),
+                .window => |window| window.renderStart(),
                 .shell_surface => {},
             }
         }
     }
 
-    wm.state = .update_rendering;
+    wm.state = .render;
     wm.rendering_scheduled.dirty = false;
 
     if (wm.object) |wm_v1| {
         // TODO kill the WM on a very long timeout?
-        wm_v1.sendUpdateRenderingStart();
+        wm_v1.sendRenderStart();
     } else {
-        wm.updateRenderingFinish();
+        wm.renderFinish();
     }
 }
 
 /// Finish the update sequence and drop stashed buffers. This means that
 /// the next frame drawn will be the post-transaction state.
-fn updateRenderingFinish(wm: *WindowManager) void {
-    assert(wm.state == .update_rendering);
+fn renderFinish(wm: *WindowManager) void {
+    assert(wm.state == .render);
     wm.state = .idle;
 
-    log.debug("update rendering finish", .{});
+    log.debug("render sequence finish", .{});
 
     {
         var it = wm.windows.safeIterator(.forward);
         while (it.next()) |window| {
-            // If a window is unmapped during a rendering update, we need to retain the saved
-            // buffers until after the next windowing update (in which the closed event will
+            // If a window is unmapped during a render sequence, we need to retain the saved
+            // buffers until after the next manage sequence (in which the closed event will
             // be sent) for frame perfection.
-            if (window.windowing_scheduled.state != .closing) {
+            if (window.wm_scheduled.state != .closing) {
                 window.surfaces.dropSaved();
             }
             if (window.destroying) {
@@ -423,13 +423,13 @@ fn updateRenderingFinish(wm: *WindowManager) void {
         while (it.next()) |node| {
             switch (node.get()) {
                 .window => |window| {
-                    window.updateRenderingFinish();
+                    window.renderFinish();
 
                     window.tree.node.reparent(server.scene.layers.wm);
                     window.tree.node.raiseToTop();
                 },
                 .shell_surface => |shell_surface| {
-                    shell_surface.updateRenderingFinish();
+                    shell_surface.renderFinish();
 
                     shell_surface.tree.node.reparent(server.scene.layers.wm);
                     shell_surface.tree.node.raiseToTop();
@@ -451,7 +451,7 @@ fn updateRenderingFinish(wm: *WindowManager) void {
 
     if (wm.rendering_scheduled.dirty) {
         wm.dirtyRendering();
-    } else if (wm.windowing_scheduled.dirty) {
+    } else if (wm.wm_scheduled.dirty) {
         wm.dirtyWindowing();
     } else {
         server.input_manager.processEvents();
diff --git a/river/XdgToplevel.zig b/river/XdgToplevel.zig
index f9f0e10..6bc792e 100644
--- a/river/XdgToplevel.zig
+++ b/river/XdgToplevel.zig
@@ -240,7 +240,7 @@ fn handleDestroy(listener: *wl.Listener(void)) void {
     const window = toplevel.window;
     window.impl = .none;
     window.destroying = true;
-    switch (window.windowing_scheduled.state) {
+    switch (window.wm_scheduled.state) {
         .init, .closing => {},
         // This can happen if the xdg toplevel is destroyed after the initial
         // commit but before the window is mapped. In this case, the state is
@@ -249,7 +249,7 @@ fn handleDestroy(listener: *wl.Listener(void)) void {
         .ready => {
             assert(!window.initialized);
             assert(!window.mapped);
-            window.windowing_scheduled.state = .init;
+            window.wm_scheduled.state = .init;
         },
     }
 }
@@ -307,8 +307,8 @@ fn handleCommit(listener: *wl.Listener(*wlr.Surface), _: *wlr.Surface) void {
     });
 
     if (toplevel.wlr_toplevel.base.initial_commit) {
-        assert(window.windowing_scheduled.state != .ready);
-        window.windowing_scheduled.state = .ready;
+        assert(window.wm_scheduled.state != .ready);
+        window.wm_scheduled.state = .ready;
         server.wm.dirtyWindowing();
         return;
     }
diff --git a/river/XkbBinding.zig b/river/XkbBinding.zig
index 4df4fa7..02b6b63 100644
--- a/river/XkbBinding.zig
+++ b/river/XkbBinding.zig
@@ -38,14 +38,14 @@ object: *river.XkbBindingV1,
 keysym: xkb.Keysym,
 modifiers: river.SeatV1.Modifiers,
 
-windowing_scheduled: struct {
+wm_scheduled: struct {
     state_change: enum {
         none,
         pressed,
         released,
     } = .none,
 } = .{},
-windowing_requested: struct {
+wm_requested: struct {
     enabled: bool = false,
     // This is set for mappings with layout-pinning
     // If set, the layout with this index is always used to translate the given keycode
@@ -124,15 +124,15 @@ fn handleRequest(
         .destroy => xkb_binding_v1.destroy(),
         .set_layout_override => |args| {
             // XXX protocol error?
-            binding.windowing_requested.layout = args.layout;
+            binding.wm_requested.layout = args.layout;
         },
         .enable => {
             if (!server.wm.ensureWindowing()) return;
-            binding.windowing_requested.enabled = true;
+            binding.wm_requested.enabled = true;
         },
         .disable => {
             if (!server.wm.ensureWindowing()) return;
-            binding.windowing_requested.enabled = false;
+            binding.wm_requested.enabled = false;
         },
     }
 }
@@ -141,8 +141,8 @@ pub fn pressed(binding: *XkbBinding) void {
     assert(!binding.sent_pressed);
     // Input event processing should not continue after a press/release event
     // until that event is sent to the window manager in an update and acked.
-    assert(binding.windowing_scheduled.state_change == .none);
-    binding.windowing_scheduled.state_change = .pressed;
+    assert(binding.wm_scheduled.state_change == .none);
+    binding.wm_scheduled.state_change = .pressed;
     server.wm.dirtyWindowing();
 }
 
@@ -150,8 +150,8 @@ pub fn released(binding: *XkbBinding) void {
     assert(binding.sent_pressed);
     // Input event processing should not continue after a press/release event
     // until that event is sent to the window manager in an update and acked.
-    assert(binding.windowing_scheduled.state_change == .none);
-    binding.windowing_scheduled.state_change = .released;
+    assert(binding.wm_scheduled.state_change == .none);
+    binding.wm_scheduled.state_change = .released;
     server.wm.dirtyWindowing();
 }
 
@@ -163,14 +163,14 @@ pub fn match(
     xkb_state: *xkb.State,
     method: enum { no_translate, translate },
 ) bool {
-    if (!binding.windowing_requested.enabled) return false;
+    if (!binding.wm_requested.enabled) return false;
 
     const keymap = xkb_state.getKeymap();
 
     // If the binding has no pinned layout, use the active layout.
     // It doesn't matter if the index is out of range, since xkbcommon
     // will fall back to the active layout if so.
-    const layout = binding.windowing_requested.layout orelse xkb_state.keyGetLayout(keycode);
+    const layout = binding.wm_requested.layout orelse xkb_state.keyGetLayout(keycode);
 
     switch (method) {
         .no_translate => {
diff --git a/rivercompat/Background.zig b/rivercompat/Background.zig
index 1b47990..0b02d10 100644
--- a/rivercompat/Background.zig
+++ b/rivercompat/Background.zig
@@ -46,7 +46,7 @@ pub fn init(background: *Background) void {
     };
 }
 
-pub fn updateWindowing(background: *Background) void {
+pub fn manage(background: *Background) void {
     if (background.new) {
         background.node.placeBottom();
         background.node.setPosition(0, 0);
diff --git a/rivercompat/Output.zig b/rivercompat/Output.zig
index fe6d26d..125c512 100644
--- a/rivercompat/Output.zig
+++ b/rivercompat/Output.zig
@@ -76,7 +76,7 @@ fn handleEvent(output_v1: *river.OutputV1, event: river.OutputV1.Event, output:
     }
 }
 
-pub fn updateWindowing(output: *Output) void {
+pub fn manage(output: *Output) void {
     if (output.pending.removed) {
         // XXX
         output.output_v1.destroy();
diff --git a/rivercompat/Seat.zig b/rivercompat/Seat.zig
index dbca16c..b9493c0 100644
--- a/rivercompat/Seat.zig
+++ b/rivercompat/Seat.zig
@@ -97,7 +97,7 @@ fn handleEvent(seat_v1: *river.SeatV1, event: river.SeatV1.Event, seat: *Seat) v
     }
 }
 
-pub fn updateWindowing(seat: *Seat) void {
+pub fn manage(seat: *Seat) void {
     if (seat.pending.new) {
         seat.focused_output = wm.outputs.first();
 
diff --git a/rivercompat/Window.zig b/rivercompat/Window.zig
index 26e7e24..94274c8 100644
--- a/rivercompat/Window.zig
+++ b/rivercompat/Window.zig
@@ -32,7 +32,7 @@ const gpa = std.heap.c_allocator;
 
 window_v1: *river.WindowV1,
 node_v1: *river.NodeV1,
-windowing: struct {
+pending: struct {
     new: bool = false,
     closed: bool = false,
 },
@@ -80,7 +80,7 @@ pub fn create(window_v1: *river.WindowV1) void {
     window.* = .{
         .window_v1 = window_v1,
         .node_v1 = window_v1.getNode() catch @panic("OOM"),
-        .windowing = .{ .new = true },
+        .pending = .{ .new = true },
         .link = undefined,
         .link_focus = undefined,
         .link_wm = undefined,
@@ -99,7 +99,7 @@ pub fn create(window_v1: *river.WindowV1) void {
 fn handleEvent(window_v1: *river.WindowV1, event: river.WindowV1.Event, window: *Window) void {
     assert(window.window_v1 == window_v1);
     switch (event) {
-        .closed => window.windowing.closed = true,
+        .closed => window.pending.closed = true,
         .dimensions_hint => {},
         .dimensions => |args| {
             window.box.width = @intCast(args.width);
@@ -122,8 +122,8 @@ fn handleEvent(window_v1: *river.WindowV1, event: river.WindowV1.Event, window:
     }
 }
 
-pub fn updateWindowing(window: *Window) void {
-    if (window.windowing.closed) {
+pub fn manage(window: *Window) void {
+    if (window.pending.closed) {
         window.window_v1.destroy();
         window.link.remove();
         window.link_focus.remove();
@@ -144,7 +144,7 @@ pub fn updateWindowing(window: *Window) void {
         return;
     }
 
-    if (window.windowing.new) {
+    if (window.pending.new) {
         window.window_v1.useSsd();
 
         if (if (wm.seats.first()) |seat| seat.focused_output else null) |output| {
@@ -181,10 +181,10 @@ pub fn updateWindowing(window: *Window) void {
         },
     }
 
-    window.windowing = .{};
+    window.pending = .{};
 }
 
-pub fn updateRendering(window: *Window) void {
+pub fn render(window: *Window) void {
     if (window.box.width != 0 and window.box.height != 0) {
         window.shadow_surface.attach(window.shadow_buffer, 0, 0);
         window.shadow_surface.damageBuffer(0, 0, math.maxInt(i32), math.maxInt(i32));
diff --git a/rivercompat/WindowManager.zig b/rivercompat/WindowManager.zig
index 2485719..7a63313 100644
--- a/rivercompat/WindowManager.zig
+++ b/rivercompat/WindowManager.zig
@@ -81,13 +81,13 @@ fn handleEvent(wm_v1: *river.WindowManagerV1, event: river.WindowManagerV1.Event
     switch (event) {
         .unavailable => main.fatal("another window manager is already running", .{}),
         .finished => unreachable, // We never send river_window_manager_v1.stop
-        .update_windowing_start => {
-            wm.updateWindowing();
-            wm_v1.updateWindowingFinish();
+        .manage_start => {
+            wm.manage();
+            wm_v1.manageFinish();
         },
-        .update_rendering_start => {
-            wm.updateRendering();
-            wm_v1.updateRenderingFinish();
+        .render_start => {
+            wm.render();
+            wm_v1.renderFinish();
         },
         .session_locked => wm.session_locked = true,
         .session_unlocked => wm.session_locked = false,
@@ -97,24 +97,24 @@ fn handleEvent(wm_v1: *river.WindowManagerV1, event: river.WindowManagerV1.Event
     }
 }
 
-fn updateWindowing(wm: *WindowManager) void {
-    wm.background.updateWindowing();
+fn manage(wm: *WindowManager) void {
+    wm.background.manage();
     {
         var it = wm.outputs.iterator(.forward);
         while (it.next()) |output| {
-            output.updateWindowing();
+            output.manage();
         }
     }
     {
         var it = wm.seats.iterator(.forward);
         while (it.next()) |seat| {
-            seat.updateWindowing();
+            seat.manage();
         }
     }
     {
         var it = wm.windows.safeIterator(.forward);
         while (it.next()) |window| {
-            window.updateWindowing();
+            window.manage();
         }
     }
 
@@ -126,11 +126,11 @@ fn updateWindowing(wm: *WindowManager) void {
     }
 }
 
-fn updateRendering(wm: *WindowManager) void {
+fn render(wm: *WindowManager) void {
     {
         var it = wm.windows.iterator(.forward);
         while (it.next()) |window| {
-            window.updateRendering();
+            window.render();
         }
     }
 }