Commit Graph
2104 Commits
Author SHA1 Message Date
purian23 60675ecb39 refactor(island): add island satellite hover option
fixes #3296
port 1.6
2026-09-09 23:36:26 -04:00
Huỳnh Thiện Lộc 65fb97d247 refactor(systemtray): overflow menu & context menu to Dpopout (#3239)
* refactor(systemtray): convert overflow menu and context menu to DankPopout

* fix(systemtray): correct window-local anchor position mapping and enable contentHandlesKeys for tray menu keyboard navigation

* fix(systemtray): force active focus on tray menu content

* fix(systemtray): address inline PR review feedback

- Force active focus on open for key navigation
- Unregister menu only if matching active instance
- Map anchor trigger position relative to screen origin

* fix(systemtray): gate onMenuOpenChanged on useOverflowPopup

- Prevent registering overflowPopout in inline expansion mode

* fix(systemtray): correct context menu positioning in overflow popout

- Handle screen global coordinate mapping for both connected and standalone popout modes

* fix(systemtray): handle per-screen backend and vertical bar anchor Y offset

- Use overflowPopout.useConnectedBackend for per-screen discriminator

- Add vertical anchor Y centering offset in showForTrayItem

* fix(systemtray): center overflow popout on vertical bar caret

- Add vertical orientation anchor Y offset in _openOverflowAt

* fix(systemtray): clear submenu entryStack on tray menu open

- Expose entryStack alias on trayMenuContentRoot

- Clear entryStack on trayMenuPopout onOpened to avoid submenu state leakage
2026-09-09 15:00:11 -04:00
Connor Welsh ba2b4a4d5d outputs: only re-enable displays the cycle itself turned off (#3377)
The cycle fallback fired from a never-cycled state. With one display
enabled and another marked off in settings, a DPMS standby that drops
the DisplayPort link looked like an unplug, and DMS sent an On to the
disabled display over niri IPC. It stayed on until the next config
reload and the workspaces round tripped through it.

Track each output's enabled state the first time a cycle touches it,
drop the entry once it is back at that state, and only rescue outputs
that were on before the cycle disabled them. Outputs that were already
off are never enabled automatically.
2026-09-09 13:02:21 -04:00
Vladimir 4b04af121f outputs: cycle connected displays on niri (#3362) 2026-09-09 10:20:38 -04:00
Zoey Bauer 8fe918ff24 add support for shelly (#3367)
* add support for shelly

* fixed terminal failure

* updated to have it not allow adding ignore aur

* updated error strings

* Fixed label

port 1.6
2026-09-08 11:50:02 -04:00
bbedward 2bf2754ad2 systray: dont wrap context menu title
port 1.6
2026-09-08 10:18:55 -04:00
BBandZoey b9365610c8 feat: support for Aqueous Compositor (#3357)
* updated dank to support aqueous

* further updates

* aqueous support work

* updated to support workspace options better in aqueous

* added blur to dms shell for aqueous

* added keybinding update

* remove unneeded blur

* clean up per claud review

* swapped to ipc

* aqueous: move IPC integration to QML, delete test fixtures (since we
dont have a QML test structure even setup), delete in-repo docs

* fix staticcheck

* aqueous: consolidate more aqueous specific stuff

* add aqueous logo

---------

Co-authored-by: Zoey <[email protected]>
2026-09-07 22:28:52 -04:00
bbedward fb07a91108 workspace: keep hit area out of adjacent spacers
fixes #3360
port 1.6
2026-09-07 21:09:18 -04:00
bbedward 17d4ea6f88 frame: draw panel backgrounds when fullscreen hides the frame
port 1.6
2026-09-07 20:45:09 -04:00
bbedward 8c42700a4c i18n: sync, change plugin workflow
port 1.6
2026-09-07 20:44:46 -04:00
bbedward 9bf8174984 i18n: sync
port 1.6
2026-09-07 13:50:47 -04:00
bbedward 0f56536142 fix(launcher): stop injectnig plugins into app categories
port 1.6
2026-09-07 10:36:21 -04:00
bbedward de27853c46 frame: keep overlay backgrounds with their content
fixes #3350
port 1.6
2026-09-07 10:29:03 -04:00
bbedward 0890db93db display: watch the session store for active profile changes
port 1.6
2026-09-07 09:55:22 -04:00
purian23 d0f47bb316 refactor(osd): add compositor agnostic workspace OSD toasts 2026-09-06 23:08:20 -04:00
bbedward c1e53dbc33 i18n: make sync script auto-pull plugins for translation
port 1.6
2026-09-06 17:04:18 -04:00
bbedward 62ad4c2cb7 bar: refresh blur region after widget layout settles
ref #3348
port 1.6
2026-09-06 13:53:54 -04:00
bbedward c76c29139f launcher: stop rebuilding the category map per app and index i18n misses
fixes #3345
port 1.6
2026-09-06 13:39:51 -04:00
bbedward 654c6dce8f controlcenter: release dgop refs while the popout is closed
ref #3349
2026-09-06 13:31:20 -04:00
bbedward 8188f53da5 audio: add output card selection
port 1.6
2026-09-06 13:14:21 -04:00
Huỳnh Thiện Lộc f3d9d73db1 feat(osd): add workspace switch OSD for niri (#1756) (#3337)
* feat(osd): add workspace switch OSD for niri (#1756)

* fix(settings): remove redundant description from workspace osd row

* fix(osd): address review feedback on workspace tracking and i18n context
2026-09-06 01:08:42 -04:00
Kaushik Rawat f9eb2381b0 Added ability to play/pause media and mute audio by middle clicking when (#3332)
using the island mode
2026-09-05 18:04:44 -04:00
bbedward 5baef07048 lock: keep the password cursor inside the field and follow it through overflow and wrapped reveals
fixes #3319
port 1.6
2026-09-05 12:26:02 -04:00
bbedward f402731ef2 network: reject weak hotspot passwords before handing them to NetworkManager
fixes #3318
port 1.6
2026-09-05 12:12:08 -04:00
bbedward 59f6f1fa71 dash, notifications, island: fix calendar banner overflow, expand chevron, and player row clipping
fixes #3300
fixes #3301
fixes #3317
port 1.6
2026-09-05 12:04:27 -04:00
bbedward 3d6e45f430 bar: focus workspace icons on any workspace and wire island overview loader
fixes #3309
fixes #3310

port 1.6
2026-09-05 11:39:43 -04:00
bbedward 85bc7604c2 display config: judge profile outputs by live heads, not stored make/model
fixes #3306
port 1.6
2026-09-05 11:29:46 -04:00
bbedward 59a03f450d theme: read the dynamic error color per mode
fixes #3298
port 1.6
2026-09-05 10:46:41 -04:00
Adolfo Ochagavía e4793327b8 Fix repeated day in calendar (#3302)
Root cause: we were creating a `Date` that did not exist in my timezone
(Santiago, Chile) because of DST. The JS engine decided to pick the
previous day, so I ended up with two times 5 September.

Fix: introduce a `DateOnly` object that internally uses UTC (to prevent
DST issues). Other parts of the system still use `Date`, which
probably should be refactored to use `DateOnly` as well (maybe in an
upcoming PR?). In the meantime, we provide a function to export a
`DateOnly` as a `Date`, using noon as the time instead of midnight
(because there are no DST changes at noon AFAIK).

We tested this manually (see the attached screenshots), but didn't find
a suitable place for automated tests.

port 1.6
2026-09-04 19:41:59 -04:00
purian23 e18931353b feat(island): vertical orientation layout management support
Port 1.6
2026-09-04 17:57:20 -04:00
bbedward cf3c76a79f bar: keep the widget font size the user asked for
ref #3295
port 1.6
2026-09-04 13:10:37 -04:00
bbedward 96a21fbe08 launcher: revalidate the cached launcher sections on load
fixes #3292
port 1.6
2026-09-04 12:00:19 -04:00
bbedward fbffa410af clock: align the horizontal time block to whole pixels
fixes #3291
port 1.6
2026-09-04 11:50:32 -04:00
bbedward 936b42b4e7 audio: resolve the sound theme before the login sound plays
fixes #3290
port 1.6
2026-09-04 11:29:17 -04:00
bbedward eb53d8983e matugen: stop embedding the adw-gtk3 body in the gtk light template
fixes #3282
port 1.6
2026-09-04 10:37:31 -04:00
bbedward 4e2afb53cc bar: make the global shadow toggles authoritative 2026-09-04 10:37:31 -04:00
bbedward a665ba8ca5 theme: write desktop settings through dconf instead of gsettings
fixes #3280
port 1.6
2026-09-04 10:37:31 -04:00
Huỳnh Thiện Lộc 07d8e28668 fix(dash): dim today button when on current month (#3294)
* fix(dash): dim today button when on current month and hide tooltip on click

* fix(dash): use Theme.shortDuration for calendar today button opacity animation

* refactor(dash): use standard DankActionButton tooltipText for calendar today button

* chore(dash): remove unused todayButton id

* fix(dash): allow returning to today when another day in current month is selected
2026-09-04 10:28:37 -04:00
枫莹 433b13cb0e fix(plugins): use plugin ids for management actions (#3284) 2026-09-04 09:51:05 -04:00
usoaraway0 cbe572eea6 niri: create screenshot directory on demand (#3286)
port 1.6
2026-09-04 09:46:16 -04:00
purian23 c1f1da1d26 feat(island): allow hiding clock or date options in compact pill
Port 1.6
2026-09-04 00:47:19 -04:00
bbedward 1f22ad4b33 changelog: disable 2026-09-03 15:12:29 -04:00
bbedward 8a871aafac bump to v1.7-beta 2026-09-03 13:54:26 -04:00
bbedward 6a4ce613bb colorpicker/popout: add instant-close machinery for eye dropper 2026-09-03 12:51:15 -04:00
bbedward ea0b3159dd bump VERSION to v1.6.0 2026-09-03 12:20:48 -04:00
bbedward ad30c2155a settings: add migration for battery style change 2026-09-03 12:17:24 -04:00
Mario Moharandbbedward 5142d576f5 fix(bar): centre widget content on whole pixels (#3263)
* fix(bar): keep widget content on whole pixels

Bar widgets centre their content inside a box of
widgetThickness - horizontalPadding * 2, and Qt rounds the offset of a
centred anchor to whole pixels. When the content and that box have
different parity the exact offset falls on a half pixel, Qt rounds it
away from zero and the content renders half a pixel above the centre.
Widgets drawn from rectangles, such as the workspace switcher, compute
their own snapped height and stay exactly centred, which is why they
look right next to everything else in #3074.

With the stock configuration this is the normal case: the bar is 40 px,
the box is 14 px and barIconSize returns round((40 / 48) * 18) = 15.

Two sizes now round to whole pairs of pixels. The icon size, so that it
matches the parity of the box, and widgetThickness, because the box
inherits its parity from there (the padding is doubled, so it never
changes it). Going through every innerPadding from 0 to 16, nine of the
seventeen configurations currently put the icon on a half pixel and none
of them do afterwards. The 48 px default bar is untouched, the sizes
that change do so by one pixel.

Measured in a nested Hyprland at scale 1, ink centroid of the widget
content relative to the centre of its pill, before and after:

  launcher      -0.50   +0.00
  weather       -0.81   -0.52
  clipboard     -1.49   -0.93
  notifications +0.03   +0.46
  battery       -0.63   -0.49
  bluetooth     -0.53   -0.03

Every icon moves down by half a pixel. What remains matches the ink
asymmetry of the individual glyphs, measured separately at an exact
position, and is not a placement error.

Two things this does not cover. On a fractional or HiDPI scale
horizontalPadding can land on a half pixel, which puts the box back
between the grid lines, and a text only widget such as the clock has a
line box of 15 px at the default font size, which cannot sit exactly on
the centre of a 28 px pill no matter how it is rounded.

Closes #3074

* fix(bar): give bar text a line box that can be centred

A widget without an icon is centred as one line box, and the same parity
rule applies to it as to the icon in the commit before this one. At
fontSizeSmall the line box of the bar font is 15 px tall, so on a 28 px
pill it cannot sit on the centre no matter which way the offset is
rounded, and the clock reads about half a pixel high next to everything
else. One step up the box is 16 px and it lands on the grid.

Only the branch the standard bar uses changes. The 0.9 branch below a
scale of 0.75 already comes out at 14 px, and the fontSizeMedium branch
above 1.25 is left alone because there the next even box is two steps
away, which would be a bigger change than this is worth.

Same session and same measurement as the previous commit, ink centroid
of the widget content relative to the centre of its pill:

  clock and date  -0.58   +0.05
  battery         -0.63   -0.05
  weather         -0.82   -0.28

The bar font goes from 12 px to 13 px, which is the visible part of this
and the reason it is a separate commit. It can be dropped without
touching the icon fix.

* bar: snap widget thickness to even device pixels and pick text sizes by line box parity

* bar: snap bar thickness to even so the pill centres on whole pixels

* bar: share the bar thickness formula so dock, osd and popouts stay in step

* dock: read the bar clearance at the compositor screen scale

---------

Co-authored-by: bbedward <[email protected]>
2026-09-03 12:13:09 -04:00
bbedward 592ca3ee8f island: follow island opacity in every state and drop covered widget blur 2026-09-03 10:40:34 -04:00
bbedward 6c54855fdd floating window: drop client side borders 2026-09-03 09:57:32 -04:00
bbedward 41c01a9319 floating windows: dont apply cornerRadius
blame 9013464312

fixes #3271
2026-09-03 09:42:41 -04:00