I'm back with the first release of 2025 🌸 🍀
Check out the release demo video on YouTube if you'd like to see everything in action 🎥
⭐ Features ⭐
- Added the ability to drag and drop containers (default is to hold the action key + shift and use the left mouse pointer to move containers around in the grid)
- (Re)added the ability to move floating containers with the mouse pointer (default is to hold the action key and use the left mouse pointer to move the floating container)
- When floated outside of the grid, users can now turn floating windows into a "mini" tiling grid that is floating above the main tiling grid, thus unlocking some pretty neat workflows!
- Implemented i3/sway's command criteria, minus a few of the X11-specific bits
- Added window closing animations (finally!)
- Added the ability to fade in/out windows and made that the default behavior
🐛 Bugs Fixed 🔧
- Fullscreen windows now appear on the correct layer (above shell elements)
- Disallowed maximized/minimized windows
- Fixing a lot of bugs where clients were sending an incorrect size and we were respecting it
- Lots and lots of output unplug/replug bugs
- Improved animation smoothness
- Fixed X11 app flickering issues
GET_OUTPUTSipc command now returns a correct payload- Sending an i3 shutdown notification correctly when miracle closes
- Fixed a bug where clip areas were not scaling correctly (#188)
- Improved object lifetime management using C++ smart pointers
- Increased test coverage 20x
- Improved build flags for debug and release modes
- And lots more!
What's Changed
- release: v0.4.0 by @mattkae in #322
- refactor: change how animation is done to improve smoothness + maintainability of the software by @mattkae in #324
- feature: add new feature flag for drag and drop by @mattkae in #325
- feature: add drag_and_drop to the configuration by @mattkae in #326
- refactor: the focused output is now set via an interface rather than yolo-ing equality by @mattkae in #327
- feature: clicking on a leaf container with the proper modifiers held now triggers the dragging state to be entered in reported to applications like waybar by @mattkae in #328
- feature: added the ability to drag leaf containers around and return them to their tile afterward by @mattkae in #329
- refactor: move all controller logic from the Policy to a separate controller to ease testing by @mattkae in #330
- refactor: prepare
CommandControllersuch that it can more easily be tested by @mattkae in #331 - feature: implement the core drag and drop functionality by @mattkae in #333
- feature: if a container is being dragged and focus is lost to it, then we end the drag and return to the normal mode by @mattkae in #334
- feature: when dragged, the actual position of the window cannot deviate from the dragged position by @mattkae in #335
- bugfix: when dragging a container, we make sure that we do not constantly intersect the same container by @mattkae in #336
- feature: when a window is being dragged, it is unconstrained by @mattkae in #337
- refactor: create the DragAndDropService and move the state over there by @mattkae in #338
- feature: add the ability to drag to an empty tiling window tree by @mattkae in #339
- bugfix: guard StubSurface::initial_placement_done so that miracle can be updated in f41 by @mattkae in #340
- bugfix: remove remaining references to boost by @mattkae in #341
- bugfix: when we release a drag, we call set_rectangle so that we hook into the animation loop properly by @mattkae in #342
- bugfix: processing the modifier key on drag and drop by @mattkae in #343
- testing: add gmock dependency to tests by @mattkae in #344
- release: v0.4.1 by @mattkae in #345
- testing: implement tets for the DragAndDropService by @mattkae in #346
- bugfix: Enforce minimum Mir version at build-time by @Conan-Kudo in #347
- refactor: renderer now gathers its data from an intermediary list instead of reaching out to the container and its surrounding objects by @mattkae in #349
- bugfix: last_selected should be std::nullopt when unset, not nullptr by @mattkae in #350
- bugfix: the animation system no longer crashes due to bad accesses on the miral::Window by @mattkae in #352
- bugfix: fixed how intersections are done with drag and drop to work appropriately + added a test for dragging on top of another container by @mattkae in #359
- refactor: miracle::Output should not rely on the miral::Output by @mattkae in #360
- bugfix: when an output disappears, we now mark it as defunct instead of removing it by @mattkae in #361
- feature: when an output disappears, we now rehome its workspaces to the next available output by @mattkae in #363
- refactor: leaf container is now more separated from the tiling tree by @mattkae in #364
- refactor: removed the TilingWindowTree entirely and moved all functionality up to the Workspace by @mattkae in #365
- feature: add a ParentContainer.is_anchored flag by @mattkae in #366
- refactor: floating windows are now just LeafContainers in an unanchored tiling window tree by @mattkae in #367
- refactor: added functionality to move one container to another to the Container instead of the Workspace by @mattkae in #369
- refactor: large refactor of lifetimes and long ignored edges in the codebase by @mattkae in #370
- bugfix: pinned windows now work as they did before by @mattkae in #371
- feature: enable build flags for debug and release builds by @mattkae in #372
- (#376) firefox no longer flickers when switching workspaces by @mattkae in #377
- (#373) workspaces select the application zone as their area during construction by @mattkae in #378
- (#368) reimplement scratchpad per the latest understanding by @mattkae in #383
- (#379) moving a window to its current workspace no longer causes a crash by @mattkae in #384
- feature: users can resize a single window floating container with the resize mechanism by @mattkae in #385
- (#388) if a window starts attached or hidden, then it should not become a leaf by @mattkae in #389
- (#386) appropriately handling the case for fullscreened and maximized windows by @mattkae in #390
- bugfix: ipc uses weak_ptr instead of raw ptr by @mattkae in #393
- bugfix: slightly smoother 60fps animations, but this might need something very different by @mattkae in #395
- (#394) bugfix: properly selecting the last selected container when switching to a workspace by @mattkae in #396
- refactor: use the ServerActionQueueAnimator instead + minor fixes by @mattkae in #397
- (#398) fixing clip area of fullscreen requests coming from the client (e.g. youtube) by @mattkae in #403
- (#400) when hidden, a leaf should be sent to the back to avoid focus issues with X11 windows by @mattkae in #404
- (#402) no longer allowing minimized windows by @mattkae in #405
- bugfix: clients cannot request to be hidden by @mattkae in #406
- (#188) applying proper scale to clip area at render time by @mattkae in #409
- (#355) layer shell elements no longer interact with the animation system by @mattkae in #411
- (#407) workspace animations do not have a race condition + we select the right container when we switch by @mattkae in #415
- (#419) fixing how LeafContainer resolves is_focused by @mattkae in #420
- (#417) do not make output selections on an output that is animating by @mattkae in #421
- warnings: fix output compilation warnings by @mattkae in #422
- feature: implementing command criteria for all IPC commands by @mattkae in #424
- feature: request the handle move request from clients by @mattkae in #428
- bufix: Fix FTBFS with glm 1.0.0+ and musl/libc++ (again) by @JamiKettunen in #432
- feature: implementing surface outro animations by @mattkae in #433
- feature: implement fade in / out animations by @mattkae in #437
- (#438) No longer throwing a fatal error when we don't have an output in Policy::advise_new_window by @mattkae in #441
- feature: reenable the ability to resize windows when they are floating by themselves by @mattkae in #442
- (#443) bugfix: hack-fixing the ipc notification not being sent on shutdown by @mattkae in #445
- (#444) opacity changes trigger a rerender on the surface properly by @mattkae in #446
- (#447) bugfix: consuming the input event even if we don't move by @mattkae in #448
- (#425) GET_OUTPUTS ipc now returns a sway-compatible result by @mattkae in #450
- (#451) move and drag and drop container services always use the primary button now instead of a random one by @mattkae in #452
- bugfix: supporting more IPC criteria and using it on the focus command by @mattkae in #455
- release: bump version to 0.5.0 by @mattkae in #456
Full Changelog: v0.4.1...v0.5.0