Skip to content

feat(dock): add full fashion mode dock workflow and popup/overflow support#1574

Open
shule1987 wants to merge 18 commits intolinuxdeepin:masterfrom
shule1987:pr/fashion-dock-series
Open

feat(dock): add full fashion mode dock workflow and popup/overflow support#1574
shule1987 wants to merge 18 commits intolinuxdeepin:masterfrom
shule1987:pr/fashion-dock-series

Conversation

@shule1987
Copy link
Copy Markdown

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

  • add a dedicated fashion mode dock layout and
    left plugin provider
  • add pinned popup support for grouped and folder
    items
  • add folder docking, folder popup navigation, and
    default dock folder migration
  • add fashion mode adaptive sizing, center
    alignment, and overflow stack/popup behavior
  • improve tray integration, quick panel
    positioning, tray spacing, and tray loader
    packaging
  • improve taskmanager drag/reorder, popup sorting,
    tooltip/preview positioning, and spotlight
    behavior
  • sync dock icons, bundled font assets, and
    launcher matching behavior
  • add the required rebase/integration fixes for
    current master

Implementation notes

  • rebased onto the latest master
  • includes the full fashion mode dock feature
    sequence rather than only the final polish commit
  • keeps the feature work in the dock/taskmanager/
    tray stack, with related support changes in shared
    popup/layershell handling

shule1987 and others added 14 commits April 28, 2026 22:41
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.
Copy link
Copy Markdown

@sourcery-ai sourcery-ai Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Sorry @shule1987, your pull request is larger than the review limit of 150000 diff characters

@deepin-ci-robot
Copy link
Copy Markdown

[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.

Details Needs approval from an approver in each of these files:

Approvers can indicate their approval by writing /approve in a comment
Approvers can cancel approval by writing /approve cancel in a comment

@deepin-ci-robot
Copy link
Copy Markdown

deepin pr auto review

@github-actions
Copy link
Copy Markdown

github-actions Bot commented Apr 28, 2026

CLA Assistant Lite bot All contributors have signed the CLA ✍️ ✅

@shule1987
Copy link
Copy Markdown
Author

I have read the CLA Document and I hereby sign the CLA.

deepin-bot Bot added a commit to linuxdeepin/cla that referenced this pull request Apr 28, 2026
@shule1987 shule1987 force-pushed the pr/fashion-dock-series branch from 854a575 to 6d977c2 Compare April 28, 2026 22:53
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.
@shule1987 shule1987 force-pushed the pr/fashion-dock-series branch from 6d977c2 to 6f2f72a Compare April 28, 2026 22:57
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.
@deepin-bot
Copy link
Copy Markdown

deepin-bot Bot commented Apr 29, 2026

TAG Bot

New tag: 2.0.39
DISTRIBUTION: unstable
Suggest: synchronizing this PR through rebase #1580

Copy link
Copy Markdown

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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

  • DockSettings persists ViewMode in a separate QSettings INI file under ~/.config/dde-shell/, but the repository also adds a View_Mode DConfig key. As-is, the DConfig key is unused and ViewMode won'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 storing ViewMode in the existing DConfig backend (and wiring it into the valueChanged handler), 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.

Comment thread CMakeLists.txt
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)
Comment thread CMakeLists.txt
Comment on lines +63 to +105
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)

Comment on lines 31 to 34
target_include_directories(ds-notification-shared PUBLIC
${CMAKE_SOURCE_DIR}/panels/notification/common
${ICU_INCLUDE_DIR}
)
Comment on lines +45 to +54
"View_Mode": {
"value": "center",
"serial": 0,
"flags": [],
"name": "View_Mode",
"name[zh_CN]": "*****",
"description": "",
"permissions": "readwrite",
"visibility": "private"
},
Comment on lines +5 to +54
"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"
},
Comment on lines 143 to 147
void WaylandDockHelper::setDockColorTheme(const ColorTheme &theme)
{
m_panel->setColorTheme(theme);
Q_UNUSED(theme)
m_panel->setColorTheme(static_cast<ColorTheme>(Dtk::Gui::DGuiApplicationHelper::instance()->themeType()));
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants