File: ROADMAP.md

package info (click to toggle)
wlmaker 0.7-1
  • links: PTS, VCS
  • area: main
  • in suites: sid
  • size: 6,884 kB
  • sloc: ansic: 54,832; xml: 1,424; python: 1,400; yacc: 118; lex: 70; sh: 16; makefile: 8
file content (482 lines) | stat: -rw-r--r-- 21,250 bytes parent folder | download
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.