<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>River on Ozbem</title><link>https://www.ozbem.com/tags/tech/river/</link><description>Recent content in River on Ozbem</description><generator>Hugo -- gohugo.io</generator><language>en</language><managingEditor>info@ozbem.com (ebeem)</managingEditor><webMaster>info@ozbem.com (ebeem)</webMaster><copyright>© 2026 ebeem</copyright><lastBuildDate>Thu, 18 Apr 2024 00:00:00 +0000</lastBuildDate><atom:link href="https://www.ozbem.com/tags/tech/river/rss.xml" rel="self" type="application/rss+xml"/><item><title>River Protocol &amp; Architecture</title><link>https://www.ozbem.com/posts/tech/river/protocol/</link><pubDate>Thu, 18 Apr 2024 00:00:00 +0000</pubDate><author>info@ozbem.com (ebeem)</author><guid>https://www.ozbem.com/posts/tech/river/protocol/</guid><description>&#10;&lt;p&gt;&#10;I’m currently studying &lt;code&gt;River&lt;/code&gt; in the hope of crafting a &lt;code&gt;guile&lt;/code&gt; scheme based window manager, &lt;code&gt;River&lt;/code&gt; uses a unique non-monolithic approach, unlike the &amp;#34;all-in-one&amp;#34; approach seen in many compositors, it splits the responsibilities of rendering and window management.&lt;/p&gt;&#10;&lt;p&gt;&#10;I am using this post as a living document to log my notes and findings as I study the &lt;code&gt;river-window-management-v1&lt;/code&gt; protocol. One done, it should be a great foundation for those who want to understand my window manager or write their own based on &lt;code&gt;River&lt;/code&gt;.&lt;/p&gt;&#10;&lt;div id="outline-container-headline-1" class="outline-2"&gt;&#10;&lt;h2 id="headline-1"&gt;&#10;interfaces&#10;&lt;/h2&gt;&#10;&lt;div id="outline-text-headline-1" class="outline-text-2"&gt;&#10;&lt;div id="outline-container-headline-2" class="outline-3"&gt;&#10;&lt;h3 id="headline-2"&gt;&#10;river_window_manager_v1&#10;&lt;/h3&gt;&#10;&lt;div id="outline-text-headline-2" class="outline-text-3"&gt;&#10;&lt;p&gt;&#10;Window management state influences the communication between the compositor&#10;and individual windows (e.g. xdg_toplevels). Window management state&#10;includes window dimensions, fullscreen state, keyboard focus, keyboard&#10;bindings, and more.Only one window management client may be active at a&#10;time. The compositor should use the unavailable event if necessary to&#10;enforce this.&lt;/p&gt;&#10;&lt;div id="outline-container-headline-3" class="outline-4"&gt;&#10;&lt;h4 id="headline-3"&gt;&#10;Requests&#10;&lt;/h4&gt;&#10;&lt;div id="outline-text-headline-3" class="outline-text-4"&gt;&#10;&lt;div id="outline-container-headline-4" class="outline-5"&gt;&#10;&lt;h5 id="headline-4"&gt;&#10;(2) stop&#10;&lt;/h5&gt;&#10;&lt;div id="outline-text-headline-4" class="outline-text-5"&gt;&#10;&lt;p&gt;&#10;description: client wants to stop/close&lt;/p&gt;&#10;&lt;p&gt;&#10;task: Nothing, wait for &lt;code&gt;finished&lt;/code&gt; event to proceed with killing the process&lt;/p&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;div id="outline-container-headline-5" class="outline-5"&gt;&#10;&lt;h5 id="headline-5"&gt;&#10;(4) destroy()&#10;&lt;/h5&gt;&#10;&lt;div id="outline-text-headline-5" class="outline-text-5"&gt;&#10;&lt;p&gt;&#10;description: should be called after the &lt;code&gt;finished&lt;/code&gt; event has been received.&lt;/p&gt;&#10;&lt;p&gt;&#10;task: clear anything that&amp;#39;s still references and &lt;strong&gt;terminate&lt;/strong&gt;&lt;/p&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;div id="outline-container-headline-6" class="outline-5"&gt;&#10;&lt;h5 id="headline-6"&gt;&#10;(6) manage_finish()&#10;&lt;/h5&gt;&#10;&lt;div id="outline-text-headline-6" class="outline-text-5"&gt;&#10;&lt;p&gt;&#10;description: client has made all changes to window management state after&#10;receiving the &lt;code&gt;manage_start&lt;/code&gt; event&lt;/p&gt;&#10;&lt;p&gt;&#10;task: Nothing, don&amp;#39;t send any requests to change window management state&#10;unless you receive another &lt;code&gt;manage_start&lt;/code&gt;&lt;/p&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;div id="outline-container-headline-7" class="outline-5"&gt;&#10;&lt;h5 id="headline-7"&gt;&#10;(7) manage_dirty()&#10;&lt;/h5&gt;&#10;&lt;div id="outline-text-headline-7" class="outline-text-5"&gt;&#10;&lt;p&gt;&#10;description: indicates that a &lt;code&gt;manage_sequence&lt;/code&gt; events is needed to reflect&#10;some new state changes&lt;/p&gt;&#10;&lt;p&gt;&#10;task: Nothing, you will receive a &lt;code&gt;manage_start&lt;/code&gt; soon to make the changes&#10;as before&lt;/p&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;div id="outline-container-headline-8" class="outline-5"&gt;&#10;&lt;h5 id="headline-8"&gt;&#10;(9) render_finish()&#10;&lt;/h5&gt;&#10;&lt;div id="outline-text-headline-8" class="outline-text-5"&gt;&#10;&lt;p&gt;&#10;description: client has made all changes to rendering state after receiving&#10;the &lt;code&gt;render_start&lt;/code&gt; event&lt;/p&gt;&#10;&lt;p&gt;&#10;task: Nothing, don&amp;#39;t send any requests to change render state unless you&#10;receive another &lt;code&gt;manage_start&lt;/code&gt; or &lt;code&gt;manage_render&lt;/code&gt;&lt;/p&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;div id="outline-container-headline-9" class="outline-5"&gt;&#10;&lt;h5 id="headline-9"&gt;&#10;(15) get_shell_surface(surface: wl_surface) -&amp;gt; id: river_shell_surface_v1&#10;&lt;/h5&gt;&#10;&lt;div id="outline-text-headline-9" class="outline-text-5"&gt;&#10;&lt;p&gt;&#10;description: client wants to create a new shell surface and assign&#10;&lt;code&gt;river_shell_surface_v1&lt;/code&gt; role to provided &lt;code&gt;surface&lt;/code&gt;, it can be used to draw&#10;status bars, menus, tab bar, etc.&lt;/p&gt;&#10;&lt;p&gt;&#10;task: Nothing&lt;/p&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;div id="outline-container-headline-10" class="outline-5"&gt;&#10;&lt;h5 id="headline-10"&gt;&#10;(16) exit_session()&#10;&lt;/h5&gt;&#10;&lt;div id="outline-text-headline-10" class="outline-text-5"&gt;&#10;&lt;p&gt;&#10;description: client wants to terminal the wayland session, this will close&#10;all clients and the compositor&lt;/p&gt;&#10;&lt;p&gt;&#10;task: Nothing&lt;/p&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;div id="outline-container-headline-11" class="outline-4"&gt;&#10;&lt;h4 id="headline-11"&gt;&#10;Events&#10;&lt;/h4&gt;&#10;&lt;div id="outline-text-headline-11" class="outline-text-4"&gt;&#10;&lt;div id="outline-container-headline-12" class="outline-5"&gt;&#10;&lt;h5 id="headline-12"&gt;&#10;(1) unavailable()&#10;&lt;/h5&gt;&#10;&lt;div id="outline-text-headline-12" class="outline-text-5"&gt;&#10;&lt;p&gt;&#10;description: indicates that window management is unavailable, most likely&#10;due to another window management client already running&lt;/p&gt;&#10;&lt;p&gt;&#10;task: The client should clear everything in this case and &lt;strong&gt;terminate&lt;/strong&gt;&lt;/p&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;div id="outline-container-headline-13" class="outline-5"&gt;&#10;&lt;h5 id="headline-13"&gt;&#10;(3) finished()&#10;&lt;/h5&gt;&#10;&lt;div id="outline-text-headline-13" class="outline-text-5"&gt;&#10;&lt;p&gt;&#10;description: indicates that the server will send no longer events&lt;/p&gt;&#10;&lt;p&gt;&#10;task: The client should clear everything in this case and send &lt;code&gt;destroy&lt;/code&gt;&#10;request&lt;/p&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;div id="outline-container-headline-14" class="outline-5"&gt;&#10;&lt;h5 id="headline-14"&gt;&#10;(5) manage_start()&#10;&lt;/h5&gt;&#10;&lt;div id="outline-text-headline-14" class="outline-text-5"&gt;&#10;&lt;p&gt;&#10;description: indicates that the server has sent events indicating new state&#10;changes&lt;/p&gt;&#10;&lt;p&gt;&#10;task: The client should send all requesting modfying the window management&#10;state then make a &lt;code&gt;manage_finish&lt;/code&gt; request&lt;/p&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;div id="outline-container-headline-15" class="outline-5"&gt;&#10;&lt;h5 id="headline-15"&gt;&#10;(8) render_start()&#10;&lt;/h5&gt;&#10;&lt;div id="outline-text-headline-15" class="outline-text-5"&gt;&#10;&lt;p&gt;&#10;description: indicates that the server has sent events indicating window&#10;positions and dimensions changes in the interface &lt;code&gt;river_window_v1&lt;/code&gt;&lt;/p&gt;&#10;&lt;p&gt;&#10;task: The client should send all requesting modfying the rendering state&#10;then make a &lt;code&gt;render_finish&lt;/code&gt; request&lt;/p&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;div id="outline-container-headline-16" class="outline-5"&gt;&#10;&lt;h5 id="headline-16"&gt;&#10;(10) session_locked()&#10;&lt;/h5&gt;&#10;&lt;div id="outline-text-headline-16" class="outline-text-5"&gt;&#10;&lt;p&gt;&#10;description: indicates that the session has been locked&lt;/p&gt;&#10;&lt;p&gt;&#10;task: The client should most likely may restrict the available keybindings&#10;or call a lock screen application&lt;/p&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;div id="outline-container-headline-17" class="outline-5"&gt;&#10;&lt;h5 id="headline-17"&gt;&#10;(11) session_unlocked()&#10;&lt;/h5&gt;&#10;&lt;div id="outline-text-headline-17" class="outline-text-5"&gt;&#10;&lt;p&gt;&#10;description: indicates that the session has been unlocked&lt;/p&gt;&#10;&lt;p&gt;&#10;task: The client should most likely may reinitiate the available keybindings&lt;/p&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;div id="outline-container-headline-18" class="outline-5"&gt;&#10;&lt;h5 id="headline-18"&gt;&#10;(12) window() -&amp;gt; id: river_window_v1&#10;&lt;/h5&gt;&#10;&lt;div id="outline-text-headline-18" class="outline-text-5"&gt;&#10;&lt;p&gt;&#10;description: indicates that a new has been created.&lt;/p&gt;&#10;&lt;p&gt;&#10;task: store the id/proxy and mapping for further use&lt;/p&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;div id="outline-container-headline-19" class="outline-5"&gt;&#10;&lt;h5 id="headline-19"&gt;&#10;(13) output() -&amp;gt; id: river_output_v1&#10;&lt;/h5&gt;&#10;&lt;div id="outline-text-headline-19" class="outline-text-5"&gt;&#10;&lt;p&gt;&#10;description: indicates that a output has been created (monitor plugged)&lt;/p&gt;&#10;&lt;p&gt;&#10;task: store the id/proxy and mapping for further use&lt;/p&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;div id="outline-container-headline-20" class="outline-5"&gt;&#10;&lt;h5 id="headline-20"&gt;&#10;(14) seat() -&amp;gt; id: river_seat_v1&#10;&lt;/h5&gt;&#10;&lt;div id="outline-text-headline-20" class="outline-text-5"&gt;&#10;&lt;p&gt;&#10;description: indicates that a seat/input has been created&#10;(keyboard/mouse/touchscreen plugged)&lt;/p&gt;&#10;&lt;p&gt;&#10;task: store the id/proxy and mapping for further use&lt;/p&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;div id="outline-container-headline-21" class="outline-3"&gt;&#10;&lt;h3 id="headline-21"&gt;&#10;river_window_v1&#10;&lt;/h3&gt;&#10;&lt;div id="outline-text-headline-21" class="outline-text-3"&gt;&#10;&lt;p&gt;&#10;Logical window. For example, a window may correspond to an xdg_toplevel or&#10;Xwayland window. A newly created window will not be displayed until the&#10;window manager makes a propose_dimensions or fullscreen request as part of&#10;a &lt;code&gt;render_sequence&lt;/code&gt;&lt;/p&gt;&#10;&lt;div id="outline-container-headline-22" class="outline-4"&gt;&#10;&lt;h4 id="headline-22"&gt;&#10;Requests&#10;&lt;/h4&gt;&#10;&lt;div id="outline-text-headline-22" class="outline-text-4"&gt;&#10;&lt;div id="outline-container-headline-23" class="outline-5"&gt;&#10;&lt;h5 id="headline-23"&gt;&#10;(1) close()&#10;&lt;/h5&gt;&#10;&lt;div id="outline-text-headline-23" class="outline-text-5"&gt;&#10;&lt;p&gt;&#10;description: client want the window to be closed, window may ignore this&#10;request&lt;/p&gt;&#10;&lt;p&gt;&#10;task: wait for &lt;code&gt;closed&lt;/code&gt;&lt;/p&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;div id="outline-container-headline-24" class="outline-5"&gt;&#10;&lt;h5 id="headline-24"&gt;&#10;(3) destroy()&#10;&lt;/h5&gt;&#10;&lt;div id="outline-text-headline-24" class="outline-text-5"&gt;&#10;&lt;p&gt;&#10;description: client cleaned window object and it can be safely destroyed&lt;/p&gt;&#10;&lt;p&gt;&#10;task: nothing&lt;/p&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;div id="outline-container-headline-25" class="outline-5"&gt;&#10;&lt;h5 id="headline-25"&gt;&#10;(4) get_node() -&amp;gt; id: river_node_v1&#10;&lt;/h5&gt;&#10;&lt;div id="outline-text-headline-25" class="outline-text-5"&gt;&#10;&lt;p&gt;&#10;description: client wants to know the node that corresponds to the window,&#10;this can only be called once per node, so it should be cached after first&#10;call.&lt;/p&gt;&#10;&lt;p&gt;&#10;task: store it as metadata of the window record/object&lt;/p&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;div id="outline-container-headline-26" class="outline-5"&gt;&#10;&lt;h5 id="headline-26"&gt;&#10;(7) propose_dimensions(width: int, height: int)&#10;&lt;/h5&gt;&#10;&lt;div id="outline-text-headline-26" class="outline-text-5"&gt;&#10;&lt;p&gt;&#10;description: client proposes dimensions for the window.&lt;/p&gt;&#10;&lt;p&gt;&#10;task: only send in &lt;code&gt;manage_sequence&lt;/code&gt; as it modifies the window management&#10;state, wait for &lt;code&gt;dimensions&lt;/code&gt; event for confirmation about the update&lt;/p&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;div id="outline-container-headline-27" class="outline-5"&gt;&#10;&lt;h5 id="headline-27"&gt;&#10;(8) hide()&#10;&lt;/h5&gt;&#10;&lt;div id="outline-text-headline-27" class="outline-text-5"&gt;&#10;&lt;p&gt;&#10;description: client wants to hide a window (newly created windows are shown&#10;by default).&lt;/p&gt;&#10;&lt;p&gt;&#10;task: only send in &lt;code&gt;render_sequence&lt;/code&gt; as it modifies the rendering state.&lt;/p&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;div id="outline-container-headline-28" class="outline-5"&gt;&#10;&lt;h5 id="headline-28"&gt;&#10;(9) show()&#10;&lt;/h5&gt;&#10;&lt;div id="outline-text-headline-28" class="outline-text-5"&gt;&#10;&lt;p&gt;&#10;description: client wants to show a window, care about windows that are&#10;placed on top of it as they will not make the target window visible.&lt;/p&gt;&#10;&lt;p&gt;&#10;task: only send in &lt;code&gt;render_sequence&lt;/code&gt; as it modifies the rendering state.&lt;/p&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;div id="outline-container-headline-29" class="outline-5"&gt;&#10;&lt;h5 id="headline-29"&gt;&#10;(15) use_csd()&#10;&lt;/h5&gt;&#10;&lt;div id="outline-text-headline-29" class="outline-text-5"&gt;&#10;&lt;p&gt;&#10;description: client wants to use client side decoration (default).&lt;/p&gt;&#10;&lt;p&gt;&#10;task: only send in &lt;code&gt;manage_sequence&lt;/code&gt; as it modifies the window management&#10;state.&lt;/p&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;div id="outline-container-headline-30" class="outline-5"&gt;&#10;&lt;h5 id="headline-30"&gt;&#10;(16) use_ssd()&#10;&lt;/h5&gt;&#10;&lt;div id="outline-text-headline-30" class="outline-text-5"&gt;&#10;&lt;p&gt;&#10;description: tell the client to use server side decoration&lt;/p&gt;&#10;&lt;p&gt;&#10;task: only send in &lt;code&gt;manage_sequence&lt;/code&gt; as it modifies the window management&#10;state.&lt;/p&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;div id="outline-container-headline-31" class="outline-5"&gt;&#10;&lt;h5 id="headline-31"&gt;&#10;(17) set_borders(edges: uint, width: int, r: uint, g: uint, b: uint,&#10;&lt;/h5&gt;&#10;&lt;div id="outline-text-headline-31" class="outline-text-5"&gt;&#10;&lt;p&gt;a:uint)&lt;/p&gt;&#10;&lt;p&gt;&#10;description: decorates the window with borders drawn by the compositor&lt;/p&gt;&#10;&lt;p&gt;&#10;task: only send in &lt;code&gt;render_sequence&lt;/code&gt; as it modifies the rendering state.&lt;/p&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;div id="outline-container-headline-32" class="outline-5"&gt;&#10;&lt;h5 id="headline-32"&gt;&#10;(18) set_tiled(edges: uint)&#10;&lt;/h5&gt;&#10;&lt;div id="outline-text-headline-32" class="outline-text-5"&gt;&#10;&lt;p&gt;&#10;description: inform the window that it is part of a tiled layout&lt;/p&gt;&#10;&lt;p&gt;&#10;task: only send in &lt;code&gt;manage_sequence&lt;/code&gt; as it modifies the window management&#10;state.&lt;/p&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;div id="outline-container-headline-33" class="outline-5"&gt;&#10;&lt;h5 id="headline-33"&gt;&#10;(19) get_decoration_above(surface: wl_surface) -&amp;gt; id: river_decoration_v1&#10;&lt;/h5&gt;&#10;&lt;div id="outline-text-headline-33" class="outline-text-5"&gt;&#10;&lt;p&gt;&#10;description: inform the window that it is part of a tiled layout&lt;/p&gt;&#10;&lt;p&gt;&#10;task: only send in &lt;code&gt;manage_sequence&lt;/code&gt; as it modifies the window management&#10;state.&lt;/p&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;div id="outline-container-headline-34" class="outline-4"&gt;&#10;&lt;h4 id="headline-34"&gt;&#10;Events&#10;&lt;/h4&gt;&#10;&lt;div id="outline-text-headline-34" class="outline-text-4"&gt;&#10;&lt;div id="outline-container-headline-35" class="outline-5"&gt;&#10;&lt;h5 id="headline-35"&gt;&#10;(2) closed()&#10;&lt;/h5&gt;&#10;&lt;div id="outline-text-headline-35" class="outline-text-5"&gt;&#10;&lt;p&gt;&#10;description: indicates that the window has been closed&lt;/p&gt;&#10;&lt;p&gt;&#10;task: clean window and send &lt;code&gt;destroy&lt;/code&gt;&lt;/p&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;div id="outline-container-headline-36" class="outline-5"&gt;&#10;&lt;h5 id="headline-36"&gt;&#10;(5) dimensions_hint(min_width: int, min_height: int, max_width: int,&#10;&lt;/h5&gt;&#10;&lt;div id="outline-text-headline-36" class="outline-text-5"&gt;&#10;&lt;p&gt;max_height: int)&lt;/p&gt;&#10;&lt;p&gt;&#10;description: indicates the window&amp;#39;s preferred min/max dimensions (excluding&#10;borders and decorations). The window manager is free to propose other&#10;dimensions for layouts that require it like tiling.&lt;/p&gt;&#10;&lt;p&gt;&#10;task: store the preferred dimensions in window object/record for further&#10;use. This event will be followed by &lt;code&gt;manage_start&lt;/code&gt; and state changes should&#10;be made there.&lt;/p&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;div id="outline-container-headline-37" class="outline-5"&gt;&#10;&lt;h5 id="headline-37"&gt;&#10;(6) dimensions(width: int, height: int)&#10;&lt;/h5&gt;&#10;&lt;div id="outline-text-headline-37" class="outline-text-5"&gt;&#10;&lt;p&gt;&#10;description: indicates the window&amp;#39;s dimensions (excluding borders and&#10;decorations). This event is sent as part of the &lt;code&gt;render_sequence&lt;/code&gt; due to&#10;&lt;code&gt;propose_dimensions&lt;/code&gt; or &lt;code&gt;fullscreen&lt;/code&gt; request&lt;/p&gt;&#10;&lt;p&gt;&#10;task: store the dimensions in window object/record for further use. This&#10;event will be followed by &lt;code&gt;render_start&lt;/code&gt; and state changes should be made&#10;there.&lt;/p&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;div id="outline-container-headline-38" class="outline-5"&gt;&#10;&lt;h5 id="headline-38"&gt;&#10;(10) app_id(app_id: string?)&#10;&lt;/h5&gt;&#10;&lt;div id="outline-text-headline-38" class="outline-text-5"&gt;&#10;&lt;p&gt;&#10;description: indicates the window&amp;#39;s application id was changed&lt;/p&gt;&#10;&lt;p&gt;&#10;task: store the &lt;code&gt;app_id&lt;/code&gt; in window object/record for further use. This will&#10;be followed by a &lt;code&gt;manage_sequence&lt;/code&gt; in case state changes need to be made.&lt;/p&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;div id="outline-container-headline-39" class="outline-5"&gt;&#10;&lt;h5 id="headline-39"&gt;&#10;(11) title(title: string?)&#10;&lt;/h5&gt;&#10;&lt;div id="outline-text-headline-39" class="outline-text-5"&gt;&#10;&lt;p&gt;&#10;description: indicates the window&amp;#39;s title was changed&lt;/p&gt;&#10;&lt;p&gt;&#10;task: store the &lt;code&gt;title&lt;/code&gt; in window object/record for further use. This will&#10;be followed by a &lt;code&gt;manage_sequence&lt;/code&gt; in case state changes need to be made.&lt;/p&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;div id="outline-container-headline-40" class="outline-5"&gt;&#10;&lt;h5 id="headline-40"&gt;&#10;(12) parent(parent: river_window_v1?)&#10;&lt;/h5&gt;&#10;&lt;div id="outline-text-headline-40" class="outline-text-5"&gt;&#10;&lt;p&gt;&#10;description: indicates the window&amp;#39;s parent was changed&lt;/p&gt;&#10;&lt;p&gt;&#10;task: store the &lt;code&gt;parent&lt;/code&gt; in window object/record for further use. This will&#10;be followed by a &lt;code&gt;manage_sequence&lt;/code&gt; in case state changes need to be made.&lt;/p&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;div id="outline-container-headline-41" class="outline-5"&gt;&#10;&lt;h5 id="headline-41"&gt;&#10;(13) decoration_hint(hint: uint)&#10;&lt;/h5&gt;&#10;&lt;div id="outline-text-headline-41" class="outline-text-5"&gt;&#10;&lt;p&gt;&#10;description: indicates the window&amp;#39;s parent was changed&lt;/p&gt;&#10;&lt;p&gt;&#10;task: store the &lt;code&gt;hint&lt;/code&gt; in window object/record for further use. This will&#10;be followed by a &lt;code&gt;manage_sequence&lt;/code&gt; in case state changes need to be made.&lt;/p&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;div id="outline-container-headline-42" class="outline-5"&gt;&#10;&lt;h5 id="headline-42"&gt;&#10;(14) decoration_hint(hint: uint)&#10;&lt;/h5&gt;&#10;&lt;div id="outline-text-headline-42" class="outline-text-5"&gt;&#10;&lt;p&gt;&#10;description: indicates the window&amp;#39;s parent was changed&lt;/p&gt;&#10;&lt;p&gt;&#10;task: store the &lt;code&gt;hint&lt;/code&gt; in window object/record for further use. This will&#10;be followed by a &lt;code&gt;manage_sequence&lt;/code&gt; in case state changes need to be made.&lt;/p&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;</description></item></channel></rss>