feat(dock): add full fashion mode dock workflow and popup/overflow support#1574
feat(dock): add full fashion mode dock workflow and popup/overflow support#1574shule1987 wants to merge 18 commits intolinuxdeepin:masterfrom
Conversation
Add the first fashion mode dock implementation pieces. Introduce the left dock area, pinned popup support, and related dock updates. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
…ements Continue the fashion mode dock series with task manager updates. Refine the left dock behavior and pinned popup interactions. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Improve popup handling and tray integration for the dock. Align popup geometry and tray behavior with the fashion mode workflow.
Sync the dock font assets with the new UI behavior. Improve launcher matching so fashion mode items resolve correctly.
Normalize the bundled font file mode in the source tree. Keep the packaged asset permissions consistent across environments.
Improve folder item presentation and tooltip behavior in the dock. Make the new fashion mode folder interactions easier to use.
Refine dock interactions for the fashion mode workflow. Extend and harden the behavior of the left side plugins.
Fix blocking path handling in the dock stack. Harden fashion mode plugin behavior for edge cases and invalid inputs.
Install the missing dock tray loader packaging entry. Ensure the tray loader is present in packaged deployments.
Sync dock icon resources with the updated fashion mode plugins. Refresh the related bundled assets used by the new behavior.
Migrate existing default dock folder entries to the new model. Preserve user-visible folder behavior after the fashion mode changes.
Refine the fashion mode behavior after the initial feature landing. Adjust the related assets so the updated interactions render correctly.
Polish the fashion mode behavior based on follow-up fixes. Tighten layout, interaction, and popup handling details.
Refine overflow sizing in the fashion dock task area. Adjust tray spacing so the final layout remains stable.
There was a problem hiding this comment.
Sorry @shule1987, your pull request is larger than the review limit of 150000 diff characters
|
[APPROVALNOTIFIER] This PR is NOT APPROVED This pull-request has been approved by: shule1987 The full list of commands accepted by this bot can be found here. DetailsNeeds approval from an approver in each of these files:Approvers can indicate their approval by writing |
deepin pr auto review |
|
CLA Assistant Lite bot All contributors have signed the CLA ✍️ ✅ |
|
I have read the CLA Document and I hereby sign the CLA. |
854a575 to
6d977c2
Compare
Restore the missing rebase integration fixes on top of current master. Keep the fashion dock series buildable after rebasing. Add explicit REUSE sidecar metadata for spotlight assets.
6d977c2 to
6f2f72a
Compare
Add explicit SPDX headers to the changed shell script and DBus XML. Keep the upstream SPDX copyright check green on this PR branch.
Refresh SPDX copyright years to match the 2026 modifications in the PR diff so upstream license checks pass consistently.
Keep the base copyright start year and extend modified files to 2026 so the upstream SPDX header checker accepts the PR diff.
|
TAG Bot New tag: 2.0.39 |
There was a problem hiding this comment.
Pull request overview
This PR rebases and integrates the “full fashion mode” dock feature set onto current master, adding new dock/tray/taskmanager behaviors (popups, overflow, adaptive sizing) plus supporting assets, settings, and migration utilities.
Changes:
- Add new dock/taskmanager/tray logic for fashion mode behavior (layout/overflow/popup sorting, tray positioning/spacing, preview/tooltip positioning, and related fixes).
- Introduce dock folder migration + popup sorting utilities, along with new/expanded unit tests.
- Update packaging/build/system integration (resources/fonts, plugin discovery, ICU linking adjustments, systemd units, config meta files).
Reviewed changes
Copilot reviewed 116 out of 154 changed files in this pull request and generated 6 comments.
Show a summary per file
| File | Description |
|---|---|
| tests/panels/dock/taskmanager/rolecombinemodeltests.cpp | Adds regression test covering row-insert/mapping behavior. |
| tests/panels/dock/taskmanager/popupsortutilstests.cpp | New unit tests for popup sort state + ordering. |
| tests/panels/dock/taskmanager/dockfoldermigrationutilstests.cpp | New unit tests for dock folder placeholder resolution + migration decisions. |
| tests/panels/dock/taskmanager/combinemodelb.h | Adds row insertion API for test model. |
| tests/panels/dock/taskmanager/combinemodelb.cpp | Implements bounded insert helper for test model. |
| tests/panels/dock/taskmanager/CMakeLists.txt | Adds new gtest executables for popup sort + folder migration. |
| shell/dde-shell.qrc | Registers bundled font resource in shell QRC. |
| panels/notification/CMakeLists.txt | Adjusts ICU include/link wiring for notification shared lib. |
| panels/dock/x11dockhelper.h | Adds state flag to X11 wake-up area helper. |
| panels/dock/waylanddockhelper.cpp | Adjusts dock theme handling on Wayland helper. |
| panels/dock/tray_loader_font_sync.qrc | New resource bundle for tray loader font sync library. |
| panels/dock/tray_loader_font_sync.cpp | Adds preloadable library to synchronize font usage in tray loader widgets. |
| panels/dock/tray/traysortordermodel.cpp | Improves visual index rebuild + position manager sync semantics. |
| panels/dock/tray/trayitempositionregister.cpp | Improves tray visual position/size registration keyed by surfaceId. |
| panels/dock/tray/trayitempositionmanager.h | Adds APIs for surface-size + visual-index mapping and layout-sync batching. |
| panels/dock/tray/trayitempositionmanager.cpp | Implements surfaceId-based size cache and batched visualItemSizeChanged emission. |
| panels/dock/tray/quickpanel/PanelTrayItem.qml | Adjusts tooltip and plugin geometry updates for tray quickpanel items. |
| panels/dock/tray/package/tray.qml | Adds adaptive fashion mode sizing/collapsed binding improvements. |
| panels/dock/tray/package/TrayItemDelegateChooser.qml | Propagates collapsed state into delegate. |
| panels/dock/tray/package/TrayContainer.qml | Adds target sizing computation based on visible items + collapse target. |
| panels/dock/tray/package/ActionToggleCollapseDelegate.qml | Improves tooltip behavior when tooltip window already visible. |
| panels/dock/tray/package/ActionShowStashDelegate.qml | Refines geometry mapping + tooltip behavior. |
| panels/dock/tray/ShellSurfaceItemProxy.qml | Improves physical-pixel snapping to avoid seams. |
| panels/dock/translations/org.deepin.ds.dock_zh_CN.ts | Updates mode string translation for zh_CN. |
| panels/dock/taskmanager/x11windowmonitor.h | Formatting-only signature wrap. |
| panels/dock/taskmanager/x11windowmonitor.cpp | Switches certain WM DBus calls to async QDBusMessage; adjusts preview opacity wiring. |
| panels/dock/taskmanager/x11preview.h | Adds animation/geometry helpers + new preview APIs. |
| panels/dock/taskmanager/treelandwindowmonitor.h | Adds animation fields/state for preview motion. |
| panels/dock/taskmanager/treelandwindowmonitor.cpp | Adds animated preview motion and state tracking. |
| panels/dock/taskmanager/translations/org.deepin.ds.dock.taskmanager_zh_CN.ts | Adds new strings for sort/popup/folder features (zh_CN). |
| panels/dock/taskmanager/textcalculator.h | Adds timer-based scheduling members for text width calculation. |
| panels/dock/taskmanager/textcalculator.cpp | Debounces text width calculation via single-shot timer. |
| panels/dock/taskmanager/taskmanagersettings.h | Adds default dock folder migration hook. |
| panels/dock/taskmanager/taskmanagersettings.cpp | Adds docked element resolution + default folder migration versioning; avoids duplicate appends. |
| panels/dock/taskmanager/taskmanager.h | Extends TaskManager API/roles for dock elements, popup descriptors/sort, trash state, temp files, etc. |
| panels/dock/taskmanager/popupsortutils.h | New popup sort field/state/types + helpers. |
| panels/dock/taskmanager/popupsortutils.cpp | Implements collator-based stable sorting + sort-state cycling. |
| panels/dock/taskmanager/package/icons/back-chevron-light.svg | Adds new UI icon asset. |
| panels/dock/taskmanager/package/icons/back-chevron-dark.svg | Adds new UI icon asset. |
| panels/dock/taskmanager/package/WindowIndicator.qml | Updates indicator rendering for compact fashion mode and multi-dot sizes. |
| panels/dock/taskmanager/package/PinnedItemIcon.qml | Adds composite preview icon rendering for pinned items. |
| panels/dock/taskmanager/package/AppItemTitle.qml | Switches to explicit dock color theme handling. |
| panels/dock/taskmanager/package/AppItemPalette.qml | Renames required property to avoid ambiguity and updates dependent color logic. |
| panels/dock/taskmanager/globals.h | Adds new action + migration version key constant. |
| panels/dock/taskmanager/dockgroupmodel.cpp | Routes actions to AbstractTaskManagerInterface; removes direct process invocation. |
| panels/dock/taskmanager/dockglobalelementmodel.h | Expands constructor/data model to include group model and new helpers. |
| panels/dock/taskmanager/dockfoldermigrationutils.h | New migration/placeholder resolution API. |
| panels/dock/taskmanager/dockfoldermigrationutils.cpp | Implements placeholder expansion, dedupe, and default-folder migration logic. |
| panels/dock/taskmanager/dconfig/org.deepin.ds.dock.taskmanager.json | Adds default folder pins and migration version key in config meta. |
| panels/dock/taskmanager/appitem.cpp | Adjusts icon selection logic (window icon first, then desktop icon, then fallback). |
| panels/dock/taskmanager/api/amdbus/org.desktopspec.ApplicationManager1.Application.xml | Updates DBus API XML (adds SPDX header + properties). |
| panels/dock/taskmanager/abstractwindowmonitor.h | Formatting-only signature wrap. |
| panels/dock/taskmanager/CMakeLists.txt | Links in new utils sources and adds package/translation build dependencies. |
| panels/dock/showdesktop/package/showdesktop.qml | Hides show-desktop area in adaptive fashion mode; improves pixel snapping. |
| panels/dock/pluginmanagerextension.cpp | Qualifies DPlatformTheme signal types for correctness. |
| panels/dock/package/icons/weather-windy.svg | Adds icon asset. |
| panels/dock/package/icons/weather-storm.svg | Adds icon asset. |
| panels/dock/package/icons/weather-storm-tornado.svg | Adds icon asset. |
| panels/dock/package/icons/weather-snow.svg | Adds icon asset. |
| panels/dock/package/icons/weather-snow-rain.svg | Adds icon asset. |
| panels/dock/package/icons/weather-snow-night.svg | Adds icon asset. |
| panels/dock/package/icons/weather-overcast.svg | Adds icon asset. |
| panels/dock/package/icons/weather-overcast-night.svg | Adds icon asset. |
| panels/dock/package/icons/weather-none-available.svg | Adds icon asset. |
| panels/dock/package/icons/weather-hail.svg | Adds icon asset. |
| panels/dock/package/icons/weather-freezing-rain.svg | Adds icon asset. |
| panels/dock/package/icons/weather-fog.svg | Adds icon asset. |
| panels/dock/package/icons/weather-few-clouds.svg | Adds icon asset. |
| panels/dock/package/icons/weather-clear.svg | Adds icon asset. |
| panels/dock/package/icons/weather-clear-night.svg | Adds icon asset. |
| panels/dock/package/icons/media-skip-forward.svg | Adds icon asset. |
| panels/dock/package/icons/media-skip-backward.svg | Adds icon asset. |
| panels/dock/package/icons/media-playback-start.svg | Adds icon asset. |
| panels/dock/package/icons/media-playback-pause.svg | Adds icon asset. |
| panels/dock/package/icons/gemini.svg | Adds icon asset. |
| panels/dock/package/icons/doubao.svg | Adds icon asset. |
| panels/dock/package/icons/aistudio.svg | Adds icon asset. |
| panels/dock/package/icons/ai.svg | Adds icon asset. |
| panels/dock/package/SpotlightGradient.svg.license | Adds SPDX license sidecar for asset. |
| panels/dock/package/SpotlightGradient.svg | Adds spotlight gradient asset. |
| panels/dock/package/SpotlightGradient.png.license | Adds SPDX license sidecar for asset. |
| panels/dock/package/FashionBackgroundInnerBorder.qml | Adds canvas-based inner border renderer for fashion background. |
| panels/dock/package/DockPartAppletModel.qml | Adds customizable filter/sort + unified hover background and safer parenting sync. |
| panels/dock/multitaskview/package/multitaskview.qml | Improves tooltip behavior when tooltip is already visible. |
| panels/dock/loadtrayplugins.cpp | Adds LD_PRELOAD injection for font sync + loader path fallback. |
| panels/dock/environments.h.in | Adds libdir + tray loader font sync build/install path defines. |
| panels/dock/docksettings.h | Adds ViewMode property and QSettings backing store. |
| panels/dock/docksettings.cpp | Implements ViewMode inference/persistence and write-job support. |
| panels/dock/dockpanel.h | Adds ViewMode, mouse presence reporting, and theme sync hooks. |
| panels/dock/dockhelper.h | Adds cursor/mouse monitoring timers/state for wake/show behavior. |
| panels/dock/dconfig/org.deepin.ds.dock.json | Adds View_Mode key to config meta. |
| panels/dock/dconfig/org.deepin.dde.dock.plugin.quick-panel.json | New config meta for default quick panel plugin keys. |
| panels/dock/dconfig/org.deepin.dde.dock.json | New config meta set for org.deepin.dde.dock consumers. |
| panels/dock/constants.h | Adds ViewMode enum and metatype declarations. |
| panels/dock/OverflowContainer.qml | Adds footer forwarding + target implicit size computation. |
| panels/dock/CMakeLists.txt | Adds Network component, tray font sync target/install, and new dconfig meta installs. |
| panels/dock/AppletItemButton.qml | Adds spotlight tracking + mouse presence reporting to panel for hover effects. |
| misc/restart-dde-shell-core.sh | New helper script to restart/health-check dde-shell core. |
| misc/dde-shell@.service.in | Updates systemd user unit configuration + dependencies/restart behavior. |
| misc/dde-shell-plugin@.service.in | Updates systemd user plugin unit configuration + restart behavior. |
| frame/qml/PanelToolTipWindow.qml | Adds visual state reset + show/close helper hooks; adjusts shadow offset. |
| frame/qml/PanelToolTip.qml | Improves tooltip geometry binding + grace-close behavior + animated show/close integration. |
| frame/qml/PanelPopupWindow.qml | Refactors geometry update path and adds explicit theme-type handling. |
| frame/private/dsqmlglobal_p.h | Exposes dataFontFamily to QML global. |
| frame/pluginloader.cpp | Improves plugin path resolution and error reporting; loads plugins by absolute path. |
| frame/dsqmlglobal.cpp | Loads bundled data font and exposes its family name. |
| debian/dde-shell.install | Installs tray font sync library + new config directories. |
| cmake/DDEShellPackageMacros.cmake | Ensures clean package dir copy; fixes translation target dependencies. |
| applets/dde-apps/appsdockedhelper.cpp | Reads dockedElements directly (fallback to legacy) and updates change triggers. |
| applets/dde-apps/appgroupmanager.h | Exposes roleNames and group helper methods. |
| applets/dde-apps/appgroup.h | Adds group id normalization helper. |
| applets/dde-apps/appgroup.cpp | Normalizes folder/group IDs and improves folder detection + name sync. |
| applets/dde-apps/CMakeLists.txt | Adds fallback DBus XML paths for ApplicationManager API generation. |
| applets/dde-appearance/appearanceapplet.h | Adds cached opacity state + refresh method. |
| applets/dde-appearance/appearanceapplet.cpp | Switches to property Get + reacts to Changed/Refreshed for opacity updates. |
| REUSE.toml | Adds REUSE annotation for the bundled font license metadata. |
| LICENSES/OFL-1.1.txt | Adds OFL 1.1 license text for bundled font. |
| CMakeLists.txt | Adds custom ICU shared-lib resolution + exposes ICU paths for downstream targets. |
Comments suppressed due to low confidence (1)
panels/dock/docksettings.cpp:205
DockSettingspersistsViewModein a separateQSettingsINI file under~/.config/dde-shell/, but the repository also adds aView_ModeDConfig key. As-is, the DConfig key is unused andViewModewon't propagate via the existing DConfig change notifications; this can cause inconsistent behavior across sessions/users and makes the setting hard to manage centrally. Consider storingViewModein the existing DConfig backend (and wiring it into thevalueChangedhandler), or remove the unused DConfig key if it isn't meant to be consumed.
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
| set(ICU_USE_STATIC_LIBS OFF) | ||
| find_package(ICU 74.2 REQUIRED COMPONENTS uc i18n io) | ||
|
|
||
| get_filename_component(DS_ICU_PREFIX "${ICU_INCLUDE_DIR}" DIRECTORY) |
| get_filename_component(DS_ICU_PREFIX "${ICU_INCLUDE_DIR}" DIRECTORY) | ||
| function(ds_resolve_icu_shared_library output_var library_basename) | ||
| set(search_roots | ||
| "${DS_ICU_PREFIX}/lib" | ||
| "${DS_ICU_PREFIX}/lib/*" | ||
| "/usr/local/lib" | ||
| "/usr/local/lib/*" | ||
| "/usr/lib" | ||
| "/usr/lib/*" | ||
| "/lib" | ||
| "/lib/*" | ||
| ) | ||
|
|
||
| foreach(search_root IN LISTS search_roots) | ||
| file(GLOB versioned_candidates LIST_DIRECTORIES false "${search_root}/${library_basename}.so.*") | ||
| list(SORT versioned_candidates) | ||
| list(REVERSE versioned_candidates) | ||
|
|
||
| foreach(candidate IN LISTS versioned_candidates) | ||
| get_filename_component(resolved_library "${candidate}" REALPATH) | ||
| if (EXISTS "${resolved_library}") | ||
| set(${output_var} "${resolved_library}" PARENT_SCOPE) | ||
| return() | ||
| endif() | ||
| endforeach() | ||
|
|
||
| file(GLOB soname_candidates LIST_DIRECTORIES false "${search_root}/${library_basename}.so") | ||
| foreach(candidate IN LISTS soname_candidates) | ||
| get_filename_component(resolved_library "${candidate}" REALPATH) | ||
| if (EXISTS "${resolved_library}") | ||
| set(${output_var} "${resolved_library}" PARENT_SCOPE) | ||
| return() | ||
| endif() | ||
| endforeach() | ||
| endforeach() | ||
|
|
||
| message(FATAL_ERROR "Could not resolve an existing ICU shared library for ${library_basename}") | ||
| endfunction() | ||
|
|
||
| ds_resolve_icu_shared_library(DS_ICU_UC_LIBRARY libicuuc) | ||
| ds_resolve_icu_shared_library(DS_ICU_I18N_LIBRARY libicui18n) | ||
| ds_resolve_icu_shared_library(DS_ICU_IO_LIBRARY libicuio) | ||
|
|
| target_include_directories(ds-notification-shared PUBLIC | ||
| ${CMAKE_SOURCE_DIR}/panels/notification/common | ||
| ${ICU_INCLUDE_DIR} | ||
| ) |
| "View_Mode": { | ||
| "value": "center", | ||
| "serial": 0, | ||
| "flags": [], | ||
| "name": "View_Mode", | ||
| "name[zh_CN]": "*****", | ||
| "description": "", | ||
| "permissions": "readwrite", | ||
| "visibility": "private" | ||
| }, |
| "Dock_Size": { | ||
| "value": 48, | ||
| "serial": 0, | ||
| "flags": [], | ||
| "name": "Dock_Size", | ||
| "name[zh_CN]": "*****", | ||
| "description": "", | ||
| "permissions": "readwrite", | ||
| "visibility": "private" | ||
| }, | ||
| "Position": { | ||
| "value": "bottom", | ||
| "serial": 0, | ||
| "flags": [], | ||
| "name": "Position", | ||
| "name[zh_CN]": "*****", | ||
| "description": "", | ||
| "permissions": "readwrite", | ||
| "visibility": "private" | ||
| }, | ||
| "Hide_Mode": { | ||
| "value": "keep-showing", | ||
| "serial": 0, | ||
| "flags": [], | ||
| "name": "Hide_Mode", | ||
| "name[zh_CN]": "*****", | ||
| "description": "The value will influence when the dock is shown or hidden.", | ||
| "permissions": "readwrite", | ||
| "visibility": "private" | ||
| }, | ||
| "Item_Alignment": { | ||
| "value": "center", | ||
| "serial": 0, | ||
| "flags": [], | ||
| "name": "Item_Alignment", | ||
| "name[zh_CN]": "*****", | ||
| "description": "", | ||
| "permissions": "readwrite", | ||
| "visibility": "private" | ||
| }, | ||
| "View_Mode": { | ||
| "value": "center", | ||
| "serial": 0, | ||
| "flags": [], | ||
| "name": "View_Mode", | ||
| "name[zh_CN]": "*****", | ||
| "description": "", | ||
| "permissions": "readwrite", | ||
| "visibility": "private" | ||
| }, |
| void WaylandDockHelper::setDockColorTheme(const ColorTheme &theme) | ||
| { | ||
| m_panel->setColorTheme(theme); | ||
| Q_UNUSED(theme) | ||
| m_panel->setColorTheme(static_cast<ColorTheme>(Dtk::Gui::DGuiApplicationHelper::instance()->themeType())); | ||
| } |
Summary
This PR brings the full fashion mode dock series
onto current
master.It adds the fashion mode specific dock workflow,
including dedicated layout logic, pinned/group/
folder popup handling, adaptive sizing, overflow
behavior, tray integration, and a set of follow-up
fixes/polish changes required to make the feature
usable on current
master.Main changes
left plugin provider
items
default dock folder migration
alignment, and overflow stack/popup behavior
positioning, tray spacing, and tray loader
packaging
tooltip/preview positioning, and spotlight
behavior
launcher matching behavior
current
masterImplementation notes
mastersequence rather than only the final polish commit
tray stack, with related support changes in shared
popup/layershell handling