Commit graph

4034 commits

Author SHA1 Message Date
0d230c5397 Fix dangling pointers and missing null check in flashlight helper
The two const char* variables were pointing into QByteArray
temporaries that were destroyed at the end of each declaration
statement. By the time they were passed to udev, the memory was
freed. Hold the QByteArrays in named locals so the data stays
alive for the duration of the function.

udev_device_new_from_syspath returns NULL if the syspath is
invalid or the device disappears between enumeration and the
privileged call. Add an early-return guard so the subsequent
udev_device_set_sysattr_value call is never reached with a null
device pointer.

Also drop the unnecessary const_cast: udev_device_set_sysattr_value
takes const char*, not char*.
2026-04-18 19:41:04 +02:00
a09f349a34 Rename CHANGELOG to OVERVIEW, fix tiling typo
CHANGELOG.md held a project overview, not versioned entries.
Also fix a typo in the screenshot filename (tilling → tiling)
and the matching README reference.
2026-04-18 19:05:19 +02:00
a29019631e Fix KF6Auth find_package order in kauth helpers
find_package(KF6Auth) was placed after target_link_libraries, so
KF6::AuthCore could be undefined when the linker target was
created. Move it before target_link_libraries in both the
flashlight and waydroid helpers.
2026-04-18 19:05:11 +02:00
209570d3b2 Fix app list model filter ordering and reset handling
ApplicationListSearchModel: beginFilterChange() was called after
mutating m_categoryFilter, inverting the documented before/after
contract. Also add null checks for sourceModel() and
favouritesModel() in filterAcceptsRow.

CategoryPanel: add onModelReset to repopulate the category list
when the underlying model is fully reloaded, not just on individual
row insertions and removals.
2026-04-18 19:05:04 +02:00
667efec483 Fix panel interactive flag and reserved height
NavigationPanel: the taskStrip ListView checked contentWidth > width
to decide whether scrolling is enabled, which is wrong when the
panel is vertical. Check contentHeight > height in that case.

taskpanel: dockSpaceReserver used a hardcoded gridUnit * 3 for both
height and exclusionZone. Use navigationPanelHeight so the reserved
strip tracks the actual panel thickness.
2026-04-18 19:04:56 +02:00
9b94c200ee Fix action drawer toolButtons ref and page indicator sync
NotificationDrawer referenced toolButtons, a sibling defined in
ContentContainer, not a local property. Add toolButtonsItem: Item
and wire it at the call site. Replace the magic literal 10 with
Kirigami.Units.largeSpacing while here.

The PageIndicator had a one-way binding to swipeView.currentIndex
that would break after a user tap. Make it bidirectional with a
Connections block and a loop guard on both sides.
2026-04-18 19:04:49 +02:00
2059f14faf Add null guards in AppletHost and TaskWidget
AppletHost: setPreloadFullRepresentation(true) does not guarantee
fullRepresentationItem() is non-null on return — the applet loads
asynchronously. Wire a single-shot connection to
fullRepresentationItemChanged to emit appletReady() when the item
arrives.

TaskWidget: operationDescription() can return null for an unknown
operation name; bail out rather than dereferencing it.
2026-04-18 19:04:40 +02:00
76e027f630 Fix Qt.rgba color arguments
Qt.rgba expects 0.0–1.0 floats. Passing 255 for R/G/B saturates
every channel to 1.0, producing opaque white instead of the
intended semi-transparent tint. Fix all call sites across
FavouritesBar, StatusBar, and AbstractDelegate.
2026-04-18 19:04:22 +02:00
dd7f087fac Add category filter panel to the app drawer
A panel between the drawer and the power panel lists the XDG
categories installed on the device as icon-and-label tiles.
Tapping one filters the app list; text search still applies
on top. The filter resets each time the drawer opens. Audio,
Video and Settings fold into their parent groups to match
Kickoff.
2026-04-18 13:20:13 +02:00
2a0e4428c7 Move close button to power panel
The dismiss button in the drawer header was isolated from the
other controls. Moving it to the top of the power panel groups
everything in one place and lets the power icons sit centered
between it and the user avatar.
2026-04-18 13:20:13 +02:00
d0b4cbe2b0 Switch power panel buttons to icon tiles
Labels are gone; each action shows only an icon with a tooltip
on hover, keeping the panel narrow. A user avatar at the bottom
opens User Accounts on click. The shadow is on a backing
Rectangle rather than via layer.enabled, which would rasterize
the panel and blur icons at non-integer scale.
2026-04-18 13:20:13 +02:00
6e48055b40 Clamp restored window below the dock
KWin restores geometry before the compositor re-commits the
exclusive zone, so the window can land partly behind the dock.
A deferred check clips the bottom edge once the round-trip
completes.
2026-04-18 13:20:13 +02:00
0b9ae2eca7 Narrow dock hit area to edge strip when hidden
The hidden dock's window still covered full height, blocking
toolbar buttons in maximized apps. Reduce the input region to
a thin strip at the screen edge while off-screen and restore
it on reveal. A debounce timer prevents an accidental edge
graze from reopening the dock.
2026-04-18 13:20:13 +02:00
3466a8c5d5 Fix trailing period in webm license header 2026-04-18 08:23:29 +02:00
5c3c3b9720 Add translucent background to convergence dock
The dock's LayerShell window is transparent; icon labels are
hardcoded white (designed to float over wallpaper on mobile).
A dark semi-transparent fill keeps labels legible on any
wallpaper without coupling to the Plasma theme color.
2026-04-18 08:23:24 +02:00
e4f4232cf2 Add power panel alongside app drawer in convergence mode
Shows a narrow card to the right of the app drawer popup with
Lock Screen, Restart, and Shut Down buttons. Uses SessionManagement
from org.kde.plasma.private.sessions directly, the same QML type
Logout.qml already uses. No C++ changes needed. Shares the drawer
open/close animation and dismisses with it.
2026-04-17 13:58:22 +02:00
8f3a94b104 Disable mobile task switcher in convergence mode
The full-screen card carousel is touch-oriented and redundant
when a keyboard and mouse are available. In convergence mode,
disable it so KWin falls back to the standard Alt-Tab tabbox.
Window switching is also covered by the dock bar icons and the
Overview effect.
2026-04-17 07:42:45 +02:00
86283b526d Move notification popup to bottom-right in convergence
The mobile popup system always anchored to top-center which
looked out of place on a desktop screen. In convergence mode,
position popups at the bottom-right corner and slide them in
from below. Swipe-to-dismiss flips to match (drag down to
dismiss instead of up). Stacked card previews and the popup
drawer tap area are hidden since notifications are already
accessible in the action drawer.
2026-04-17 07:10:23 +02:00
c2b864d8b4 Show action drawer as bounded panel in convergence
Replace the full-screen slide-down sheet with two fade-in cards
anchored to the top corners. Quick settings sit top-right,
notifications top-left capped at 60% screen height. Background
scrim reduced to 30%. Redundant clock header and status bar
hidden since both are already visible in the top panel.
2026-04-16 17:42:06 +02:00
d1cd5f09d8 Replace static screenshots with desktop demo videos
The three webm clips showcase convergence mode better than
still images. Drop the old PNG references from the README.
2026-04-16 13:58:34 +02:00
2a137d1ac9 Promote management tiles to status rows in convergence
Wi-Fi, Bluetooth, Sound and Battery behave differently from
toggle tiles: tapping them should open a detail panel, not
flip a switch. On a phone the long-press convention handles
this, but with a mouse long-press is unnatural.

Pull these four tiles out of the grid when convergence mode
is active and show them as full-width rows above the remaining
tiles. Each row has two click zones — a toggle pill on the
left that still switches the service on/off, and a detail
area on the right (name, status, chevron) that opens the
Plasma applet popup. The grid hides the duplicates so they
only appear once.
2026-04-16 13:41:24 +02:00
8017e4eaa0 Show applet popup on tile long-press in convergence
Long-pressing a mapped quick-settings tile in convergence
mode opens a floating popup with the Plasma applet UI
instead of launching System Settings. Unmapped tiles still
open Settings.

AppletHost creates a standalone Corona to host applets
outside the shell containment tree.
2026-04-15 14:58:25 +02:00
b77bf41cdc Fix action drawer not opening on click in convergence
open() alone does not set intendedToBeVisible, so the drawer
immediately closes itself. Call the proper toggle path instead.
Also hide the drag handle since convergence users click.
2026-04-15 14:58:15 +02:00
d8f9924c73 Widen quick settings panel in convergence mode
Use up to 45% of screen width so more tiles are visible
without pagination. Tile size stays touch-friendly.
2026-04-15 11:58:08 +02:00
2c7d88e5d8 Show down-arrow on status bar hover in convergence
Desktop users have no visual cue that the top bar opens quick
settings. Fade in a small arrow-down icon at the bottom center
when the mouse hovers, matching the arrow-up hint on the
favourites bar.
2026-04-15 11:20:07 +02:00
7fa2c20ab4 Open app drawer over windows in convergence mode
Drawer is inside the homescreen, which sits behind windows.
Home button minimized everything to reach it. Render it in
a LayerTop window instead and skip the blanket minimizeAll
in the D-Bus handler.
2026-04-15 10:24:12 +02:00
c61642265b Respect auto-hide setting for convergence dock
Dock and space reserver hid unconditionally on maximize.
Gate both on autoHidePanelsEnabled. Make the exclusive zone
constant — dynamic changes on a contentless surface never
get committed to the compositor.
2026-04-15 10:24:12 +02:00
1cd280e32f Add REUSE license info for HACKING.md 2026-04-14 07:41:20 +02:00
e2429b6bda Update HACKING.md for KWin script loading 2026-04-14 07:17:51 +02:00
756259bb01 Show pointer cursor on system tray icons 2026-04-13 19:37:42 +02:00
2c77b4c979 Dismiss action drawer with Escape in convergence mode 2026-04-13 13:53:53 +02:00
3cf1f4708e Show pointer cursor on dock clickable areas 2026-04-13 13:53:47 +02:00
220be94b63 Allow dragging running dock tasks to pin them
Running task icons in the convergence dock can now be dragged into the favourites section to pin the app at the drop position.

Add indexed insertion to FavouritesModel so pinning can place the new favourite at a specific slot instead of always appending.

Show a placeholder while dragging and reuse the existing addApplication path for the final pin action.
2026-04-13 12:32:54 +02:00
0cbd933e71 Add middle-click to close running dock tasks
Middle-click on a running task in the dock now closes it, matching
standard desktop taskbar behavior.
2026-04-13 11:53:26 +02:00
4efc6e29c7 Fix build instructions to use LOCAL_KAUTH_INSTALL 2026-04-13 09:39:27 +02:00
36a39e1537 Add spacer between pinned and running dock items 2026-04-13 09:39:19 +02:00
963e798e64 Add touch-mode screenshot and EUPL note
Add the committed touch-mode screenshot asset and reference it in the\nREADME. Clarify the project licensing section so the README\npoints at EUPL-1.2 while preserving upstream file licenses.
2026-04-13 09:01:37 +02:00
237ade7eb6 Add developer setup and workflow guide 2026-04-13 08:37:19 +02:00
756fa5dc54 Add EUPL-1.2 license headers for Shift-specific files
REUSE CI requires copyright and license info on every file.
CHANGELOG, README, and the two Shift screenshots are original
work, licensed under EUPL-1.2.
2026-04-12 15:19:29 +02:00
9bccbeede6 Add drag-reorder for dock favourites
Click-and-drag reordering of favourites bar items in convergence
mode.  The existing touch-based press-and-hold drag is kept for
mobile; in convergence mode, press-and-hold opens the context
menu only.

DelegateTouchArea owns the exclusive mouse grab at the C++ level,
so drag detection (threshold crossing + delta signals) is added
there rather than using a QML DragHandler.  Displaced items
animate into their new positions while the dragged item follows
the cursor.

Expose FavouritesModel::moveEntry as Q_INVOKABLE so QML can
persist the reorder.
2026-04-12 14:15:13 +02:00
ca6170c1f5 Add close button to dock thumbnail preview popup 2026-04-12 10:15:28 +02:00
213de171fb Add convergence mode screenshots to README 2026-04-12 09:48:52 +02:00
03ba3bc616 Fix Pin to Dock not reappearing after unpin
The visible binding on the Pin to Dock menu item called the
imperative containsApplication() without any reactive dependency,
so QML never re-evaluated it after model changes. Add repeater.count
to the binding to force re-evaluation when favourites change.
2026-04-12 09:36:23 +02:00
1ce85bba28 Remove tooltips from dock nav buttons
The ToolTip popups were overlapping the Home and Overview buttons,
blocking click input. The icons are self-explanatory.
2026-04-12 09:23:44 +02:00
9e60c0e923 Keep status bar visible in convergence mode
The status bar was hidden whenever a window was showing because
the fullscreen property evaluated autoHidePanelsEnabled without
checking convergence mode.  Return false from fullscreen when
convergence is active so the bar stays on screen.

Use WindowsGoBelow visibility mode in convergence so PanelView
does not manage the exclusive zone (it would fight with the
LayerOverlay layer set by QML).  Add a separate layer-shell
surface at LayerBottom with an exclusive zone matching the bar
height, following the same pattern as the dock space reserver.
Re-run setWindowProperties on convergence mode changes.
2026-04-11 13:25:26 +02:00
86b34878c7 Group dock icons by application in convergence mode
Switch TasksModel from GroupDisabled to GroupApplications so
multiple windows of the same app share a single dock icon.
Replace the per-task windowCountForTask() helper with the
built-in WinIdList role.

The thumbnail popup now shows a horizontal row of per-window
previews.  Clicking a grouped icon toggles the popup instead
of activating a single window.  "Close All" replaces the
close action for multi-window groups.
2026-04-11 13:25:01 +02:00
6fd5a59a43 Remove bug fixes bullet from CHANGELOG
These items were rolled into their respective feature commits and
do not need a separate entry.
2026-04-11 12:05:27 +02:00
3f3c2dc07c Rewrite README with disclaimer and upstream section
Replace the one-line intro with a clearer project description.
Add a disclaimer clarifying no affiliation with KDE.
Add an upstream relationship section noting this is not a direct
contribution but parts may be proposed upstream.
2026-04-11 12:05:21 +02:00
3728ef7602 Auto-hide dock when a window is maximized
Slide the dock off-screen when WindowMaximizedTracker reports a
maximized window, and bring it back on mouse proximity via a
HoverHandler.  The dockSpaceReserver exclusion zone drops to 0 so
KWin gives the full screen to the maximized window.

Animation follows the StatusBarWrapper pattern: offset property,
Translate transform, Behavior with InExpo/OutExpo easing.
2026-04-11 12:05:15 +02:00
41a64bfe8e Add opaque background to dock overlay window
The transparent dock overlay at LayerTop let maximized app content
bleed through, visible as a colored band (e.g. VLC's orange toolbar)
behind the favourites bar.

Add a Rectangle with Kirigami.Theme.backgroundColor using the Window
colorset, matching the pattern used by NavigationPanelComponent.
2026-04-11 10:34:23 +02:00