1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482
|
# wlmaker - Roadmap
Vision: A lightweight and fast Wayland compositor, visually inspired by Window
Maker, and fully theme-able and configurable.
Support for visual effects to improve usability, but not for pure show.
See the [Detailed Feature List](FEATURES.md) for details.
## Plan for 0.9
**Focus** Dock & Mini-Windows
* Clip & Dock handling
* Add option to save Dokc & Clip state.
* Document the state file.
* Save state for Clip, Dock.
* Toplevel windows show an icon, unless started from dock.
* There is a means to attach an icon to Dock or Clip (eg. via menu action).
* Support window minimize
* From libxdg-basedir:
* Fix leak with libxdg-basedir.
* Look whether to expand to use XDG_STATE_HOME
## Plan for 0.8
**Focus** Themes
* Themes/Styles
* [done] Settle on whether to use 'Themes' or 'Styles'. Update files & references.
* Add means to change theme while running.
* Windows
* Store and accept window state (fullscreen, maximize) before mapping.
* Initial placement algorithm.
* Infrastructure
* Recompute pointer focus max once per frame.
* Read keymap from `/etc/default/keyboard` or similar.
* Support keypad (tap to click) and middle click alternatives.
* Support configurable means (eg. Alt+) to emulate right-click on laptop.
* Fix: On scaled output, pointer cursor is tiny.
* Write log to logfile (vs. stderr).
* Have a naive app to show battery status.
* Wire up backlight control to window menu.
## [0.7](https://github.com/phkaeser/wlmaker/releases/tag/v0.7)
**Focus**: Smooth resizing for surfaces and clean implementation, persist Output state.
* [done] Cleanups:
* [done] Replace wlmtk_window_t, wlmtk_content_t & wlmtk_pane_t) with simpler wlmtk_window2_t implementation.
* [done] Add wlmtk_window2_t as the updated window version.
* [done] Replace wlmtk_window_t with wlmtk_window2_t for menu windows.
* [done] Extend wlmtk_window2_t to support shade, maximize, menu, popups, client.
* [done] Replace wlmtk_window_t with wlmtk_window2_t for XWL windows.
* [done] Remove all references of wlmtk_window_t, wlmkt_content_t, wlmtk_pane_t.
* [done] Rename wlmtk_window2_t to wlmtk_window_t once earlier references gone.
* [done] wlmtk_backend_t review & improve naming.
* [done] Inconsistency of "ephemeral" state vs state.
* [done] Check file existence, so there is no ERROR in the log. bs_file_exists?
* [done] Move config and data files into XDG-compliant config, resp. data paths.
* [done] Move config files to XDG configuration home, and lookup from there.
* [done] Move the desktop and logo files to XDG-compliant data paths.
* [done] Use app_id for wlmclock, wlmeyes that encodes URL, as seen otherwise.
* [done] Fixes lost pointer focus when releasing right-clicked window menu.
* [done] Bug fixes
* [done] Resize-from-left jitter observed on the raspi or with gnome-terminal.
* [done] Particularly when using large decorations, there is resize jitter.
* [done] Fix size increase on client-side decoration when resizing: Internal size mismatch?
* [done] Propagate decoration mode and toplevel configure() only after first surface commit.
* [done] [#275](https://github.com/phkaeser/wlmaker/issues/275): Fix crash with early configure.
* [done] [#258](https://github.com/phkaeser/wlmaker/issues/258): Fix crash on early non-fullscreen
* [done] Fix: Maximizing non-decorated window does not use all space. Review size computation.
* [done] Fix: Crash with xterm observed with wlroots 0.19.
* [done] xwl: Fix for audacious crashing on exit in Winamp mode.
* [done] [#322](https://github.com/phkaeser/wlmaker/issues/322): Fix lost click with root menu.
* [done] [#325](https://github.com/phkaeser/wlmaker/issues/325): Set a default window position that is within the layout.
* [done] Persist output state
* [done] Save state for Output.
* [done] Create the base directory, if it does not yet exist.
* [done] Load Output on startup, and (re)apply the configuration.
* [done] Fix: Backend state not loaded on laptop?
* [done] Infrastructure
* [done] Make it compile for wlroots 0.19, and update tests accordingly.
* [done] Add Debian Forky as tested distribution, and update from Bookworm to Trixie.
* [done] Add `pointer-position` experimental protocol, and a `wlmeyes` app.
* [done] Be `iwyu`-clean on Trixie.
* [done] Embed version and have a `--version` argument to print out.
* [done] Define lookup path for Dock icons (can these be in XDG_DATA_DIR?).
* [done] Remove `Logo` key from default configured hotkeys.
* [done] Add an argument to require `Logo` for key bindings when running under Wayland or X11 backend.
* [done] Add desktop entry and logo for wlmeyes.
* [done] Change drag-move to use 'Alt' not 'Logo+Alt'.
* [done] Add menu option to add, respectively remove workspace.
* [done] Branding
* [done] Align SVG logo exactly with horizontals & verticals.
* [done] Add white background elements for logo to show well on dark backgrounds.
* [done] Install the icon suitable for XDG desktop. Includes 48x48 and 64x64.
* [done] Documentation: Upsize header font, and show on div with white background.
## [0.6](https://github.com/phkaeser/wlmaker/releases/tag/v0.6)
**Focus**: Multiple outputs.
* [done] Support for dynamic output configurations.
* [done] Support `wlr-output-management-unstable-v1` protocol.
* [done] Verify that `wlr-randr` works, for `test` and `apply`.
* [done] Fix: Report output position correctly.
* [done] Verify that setting output position works as desired.
* [done] Fix: Handle --on and --off, should remove output and re-position dock & clip.
* [done] Support `xdg-output-unstable-v1` protocol.
* [done] Verify that `wdisplays` works.
* [done] Fix `wdisplays` crash when unsetting `Overlay Screen Names`: [Known](https://github.com/artizirk/wdisplays/issues/17) `wdisplays` issue.
* [done] Fix positioning of overlaid screen names.
* [done] Add `wlr-screencopy-unstable-v1` support.
* [done] Test and verify: Multiple monitors supported. Supporting:
* [done] per-monitor fractional scale.
* [done] per-monitor transformation setting.
* [done] `wlr-layer-shell-unstable-v1` implementation fixes:
* [done] Update layer positioning to be respective to the panel's configured output.
* [done] Permit `wlmaker.plist` per-output configuration, to persist layout.
* [done] Explore if wlroots permits mirroring layouts. If yes: Implement.
(Via outputs sharing the same position, through `wlr-randr` or `wdisplays`).
* [done] Window (toplevel) handling on multiple outputs:
* [done] Support and handle `wl_output` arg to `xdg_toplevel::set_fullscreen`.
* [done] 'fullscreen': Fill the configured (or active) output.
* [done] 'maximized': Maximize on configured (or active) output.
* [done] When an output is removed: Re-position toplevels into visible area.
* [done] Fix screen lock behaviour: Ensure the unlock surface is shown on all outputs.
* [done] Permit specifying output for dock, clip and icon area (similar `KeepDockOnPrimaryHead`)
* [done] Add "scaling" actions, configurable as hotkey and in root menu.
* [done] Add "output configuration" item to the root menu. (eg. XF86Display key?)
* [done] Menu
* [done] Permit navigation by keys
* [done] Generate from XDG repository ([#90](https://github.com/phkaeser/wlmaker/issues/90)).
* [done] Documentation for menu configuration.
* [done] Draw a submenu hint (small triangle) on items expanding into a submenu.
* [done] Bug fixes
* [done] Verify subprocess from action have stdout & stderr captured and logged.
* [done] Fix keyboard input not working for Firefox.
* [done] When switching workspace, pointer state appears to be reset.
* [done] Test handling of mouse position when changing element visibility. Making
an element visible should re-trigger focus computation.
* [done] Verify handling of element motion() and button() return values.
* [done] Fix non-updating wlmclock observed on non-accelerated graphics stack.
## [0.5](https://github.com/phkaeser/wlmaker/releases/tag/v0.5)
**Focus**: Add root menu and window menu.
* [done] Menu, based on toolkit.
* [done] Root menu: Basic actions (quit, lock, next- or previous workspace).
* [done] Menu shown on right-button-down, items trigger on right-button-up.
* [done] When invoked on unclaimed button, exits menu on button release.
* [done] Available as window menu in windows.
* [done] Available also for X11 windows.
* [done] Available as (hardcoded) application menu.
* [done] Menu with submenus.
* [done] Window menu adapting to window state.
(Eg. "Maximize" shown when not maximized, otherwise: "restore".)
* [done] When positioning the root menu, keep it entirely within the desktop area.
* [done] Lookup root menu plist file in home or system directory.
* [done] Support `xdg_shell`, based on toolkit.
* [done] show window menu.
* [done] Support `layer_shell`, based on toolkit.
* [done] Fixed [#158](https://github.com/phkaeser/wlmaker/issues/158), an setup issue triggered when running fuzzel.
* [done] preliminary support for keyboard interactivity.
* Bug fixes
* [done] Fix crash when closing a shaded window.
## [0.4](https://github.com/phkaeser/wlmaker/releases/tag/v0.4)
**Focus**: Make it ready for "Early-Access".
* [done] Thorough tests of both pointer and keyboard state.
* [done] Issue found when killing saylock that keyboard focus is incorrect.
* [done] Re-activate workspace & windows after lock.
* [done] Screensaver support.
* [done] Magic corner to lock immediately.
* [done] Magic corner to inhibit locking.
* [done] Configurable corners & timeout.
* [done] Documentation updates
* [done] Update README to reflect "early-access" vs. "early development".
* [done] Screenshots included.
* [done] Update build system to use libraries from the base system rather than
the `dependencies/` subdirectory, if versions are avaialble.
* [done] Upgrade to wlroots 0.18. (support both 0.17 and 0.18 in code).
* [done] Have github actions compile on trixie, using the host library.
* [done] Have github actions compile not just 0.17, but also 0.18.
* [done] Verify if that & libdrm update works with lightdm. It
[does not](https://github.com/canonical/lightdm/issues/267).
* [done] Support different output scale & transformations
* [done] Add a style file that has dimensions suitably for a Hi-Res screen (eg. Retina) ([#99](https://github.com/phkaeser/wlmaker/issues/99))
* [done] Scale icons to tile size.
* [done] Add option to specify an output transformation ([#97](https://github.com/phkaeser/wlmaker/issues/87)). Note: Will not work well in X11 window mode.
* [done] Add commandline arguments to configure size of window ([#98](https://github.com/phkaeser/wlmaker/issues/98))
* [done] Misc
* [done] Expose the decoration manager configurables through the config file.
* [done] Add support for switching virtual terminals ([#6](https://github.com/phkaeser/wlmaker/issues/6)).
* [done] Bug fixes
* [done] Investigate & fix handling of axis (touchpad) on tty.
* [done] Fix wrong size for lock surface when Output scale != 1.0 on tty.
* [done] Fix leak / double free with config_dict_ptr.
## [0.3](https://github.com/phkaeser/wlmaker/releases/tag/v0.3)
* Bugfixes
* [done] Fix issue on fullscreen: The window border is kept, having the window off by 1 pixel.
* [done] Add commandline flag to enable/disable XWayland start.
* [done] Verify startup on console works.
* [done] Screensaver support.
* [done] Implement ext-session-lock-v1 protocol.
* [done] Verify screen lock works with eg. swaylock.
* [done] Implement timer for lock, and support zwp_idle_inhibit_manager_v1 to inhibit.
* [done] Verify this still works after the to-toolkit move.
* [done] Configuration file support
* [done] Pick or implement parser for configuration file.
* [done] File for basic configuration: Keyboard map & config, auto-started apps.
* [done] Configure idle monitor and screensaver command via config file.
* [done] Configurable key combinations for basic window actions (minimize, ...).
* [done] File for visual style (theme): decoration style, background.
* [done] File to define workspaces and dock, falling back to default if not provided.
* [done] Include at least one additional theme.
* [done] Theme details
* [done] Style for resizebar.
* [done] Style for the window's margin.
* [done] Style for the window border.
* [done] Titlebar icons centered.
* [done] Titlebar icons with text color, blurred or focussed.
* ~~Bezel 'off' color so it is visible on black (not doing).~~
* [done] Titlebar font and size.
* [done] Style for clip.
* [done] Style for task list fill and text color.
* [done] Support `layer_shell`, based on toolkit.
* [done] XDG Popups.
* [done] Multiple workspaces, based on toolkit.
* [done] Remove the earlier non-toolkit code.
* [done] Background color for separate workspaces, configured in state.
* [done] Default background color, picked up from style file.
* [done] Navigate via keys (ctrl-window-alt-arrows, configurable in plist).
* [done] Dock, visible across workspaces, based on toolkit.
* [done] Keep track of subprocesses and the corresponding windows.
* [done] Style similar to Window Maker.
* [done] With application launchers (configurable in file).
* [done] Clip, based on toolkit.
* [done] Display the current workspace.
* [done] Buttons to switch between workspaces.
* [done] Application launchers, based on toolkit.
* [done] Display an icon.
* [done] Display application status (*starting*, *running*).
* [done] Configurable (in code).
* [done] Task list (window-alt-esc), cycling through windows.
* [done] Migrate implementation to wlmtk.
* [done]Key combination configurable in the config file.
* [done] Build & compile off released dependency versions.
## [0.2](https://github.com/phkaeser/wlmaker/releases/tag/v0.2)
* [done] Issues to fix:
* [done] Fix out-of-sync display of server-side decoration and window content when resizing.
* [done] Fix assertion crash when mouse is pressed, then moved to another toplevel, then released.
* [done] Hide window border when not having server-side decoration.
* [done] Fix issue with Chrome: Enabling "Use system title and boders" will pick a slightly small decoration.
* [done] Fix resize issue with Chrome & Firefox: The content size and actual window size can differ, which led to jumpy resizes as get_size and request_size operations did not base on the same.
* [not reproducible] Fix issue on resizing: When moving the mouse too quickly, focus is lost and the resizing stops.
* [done] Experimental support for Dock Apps
* [done] Experimental wayland protocol for Apps to declare icon surfaces.
* [done] Surfaces will be shown in either tile container, clip or dock area,
depending from where the app was started.
* [done] Demo DockApps included (digital clock)
* [done] Initial XWayland support
* [done] Cover enough functionality to support xterm
* [done] Enough functionality to support emacs in X11.
* [done] Support for child surfaces.
* [done] Positioning of popups
* [done] Ensure stacking order is respected and used.
* [done] Popups do not contribute to window extensions (no border hops)
* [done] Cursor set appropriately.
* [done] Set DISPLAY env variable appropriately.
* [done] Handling of modal windows: Should have decorations, stay on top.
* [done] Configurable keyboard map (in code ~or commandline arg~)
* Support `xdg_shell`, based on toolkit.
* [done] XDG Popups.
* [done] Move and Resize, compliant with asynchronous ops.
* [done] Maximize.
* [done] Set title.
* [done] fullscreen.
* [done] Fix positioning of popups.
* [regression, not supported] show window menu.
* [done] Support window decoration protocol, based on toolkit.
* [done] Style of title bar, iconify and close buttons similar to Window Maker.
* [done] No border shown when windows are not decorated (eg. chrome, firefox)
* [done] Task List
* [done] Listing windows, rather than views.
* [done] Window actions, based on toolkit.
* [done] Move ([done] drag via title bar, or [done] window-alt-click)
* [done] Resize windows, including a resize bar.
* [done] Fullscreen windows.
* [done] Maximize windows.
* [done] Roll up (*shade*) windows.
* [done] Raise window when activated.
* [done] App Launcher: Update status for wlmtk_window_t, instead of
wlmaker_view_t.
### Internals and code organization
* [done] Design a toolkit and re-factor the codebase to make use of it.
* Ensure the main features (eg. all explicit actions and features above) are
tested.
## [0.1 - MVP milestone](https://github.com/phkaeser/wlmaker/releases/tag/v0.1)
### Features
* [done] Support `xdg_shell`.
* [done] Support `layer_shell`.
* [done] Support window decoration protocol.
* [done] Style of title bar, iconify and close buttons similar to Window Maker.
* [done] Window menu, with basic window actions (not required to adapt to state).
* [done] Multiple workspaces
* [done] Navigate via keys (ctrl-window-alt-arrows, hardcoded).
* [done] Dock, visible across workspaces.
* [done] Style similar to Window Maker.
* [done] With application launchers (hardcoded).
* [done] Clip
* [done] Display the current workspace.
* [done] Buttons to switch between workspaces.
* [done] Application launchers
* [done] Display an icon.
* [done] Display application status (*starting*, *running*).
* [done] Configurable (in code).
* [done] Window actions
* [done] Move (drag via title bar, or window-alt-click)
* [done] Resize windows, including a resize bar.
* [done] Fullscreen windows.
* [done] Maximize windows.
* [done] Minimize (*iconify*) windows.
* [done] Roll up (*shade*) windows.
* [done] Raise window when activated.
* [done] Visualization of iconified applications.
* [done] Task list (window-alt-esc), cycling through windows.
* [done] Auto-start of configured applications.
* [done] Configurable in code.
* [done] Verify minimal application set to run:
* [done] Terminal: `foot`
* [done] Google Chrome
* [done] Mozilla Firefox
* [done] Works as a X11 window, Wayland client or standalone compositor.
### Internals and code organization
* [done] git submodule for direct and critical dependencies.
* [done] CMake as build system.
* [done] `test` and `doc` targets.
* [done] Published as open source.
## Features and work items pending roadmap placement
### Major feature milestones
* Initial multi-monitor support: Mirrored.
* Toplevel windows represented as icons & minimized (iconified) windows.
* Drag-n-drop of icons into & from dock & clip.
### Features for further versions, not ordered by priority nor timeline.
## Window Maker features
## Overall
* Window attributes
* Build and test a clear model for `organic`/`maximized`/`fullscreen` state
switches and precedence.
* Application support.
* Icons retrieved and used for iconified windows. See [themes](https://specifications.freedesktop.org/icon-theme-spec/icon-theme-spec-latest.html).
* Make use of XDG Desktop Entry [specification](https://specifications.freedesktop.org/desktop-entry-spec/desktop-entry-spec-latest.html).
* Configuration file and parser:
* Support different background styles (fill, image).
* Make semicolon-after-value required, for consistency with GNUstep.
* Theme.
* [done] Added ADGRADIENT fill style, aligned with Window Maker's diagonal.
* Adds support for textures as fill (tiled, scaled, maximized, centered, filled?)
* Add drag-modifier option, to configure when a drag makes a window move.
* Configurable keyboard map.
* Verify support of multi-layout configurations (eg. `shift_caps_toggle`)
* Support ChromeOS layout switch hotkey (`Ctrl+Shift+Space`)
* Configuration tool, similar to WPrefs.
* Compositor features
* Bindable hotkeys.
* Pointer position, to support apps like wmscreen or xeyes.
* Commandline flags to support:
* icon lookup paths beyond the hardcoded defaults.
* Reduce Technical Debt
* Move the setenv calls for DISPLAY and WAYLAND_DISPLAY into subprocess
creation, just after fork. These should not impact the parent process.
* subprocess_monitor: Use listeners, not callback.
* Exploratory ideas
* Stretch: Consider supporting XScreenSaver (or visualization modules).
## Visualization and effects
* Animations
* Launching applications, when *starting*.
* Size changes (maximize, minimize, fullscreen).
* Task switcher
* Application icons or minimized surfaces to visualize applications.
* Animations when switching focus.
* Clean up signal handling (emit on task switch, enable, disable).
* Resizing & moving
* Consider visualizing windows partially transparent when resizing or moving.
## Dock Apps
* Sensors.
* Clock
* System tray.
* CPU load.
* Network monitor.
* Laptop battery status.
* Julia set.
## Non-Goals
* Do not (re)create a GNUStep environment.
* Creating a dedicated toolkit.
|