Skip to content

fix(surface): keep modal window animation above parent - #1381

Merged
zccrs merged 1 commit into
linuxdeepin:masterfrom
glyvut:master
Sep 8, 2026
Merged

fix(surface): keep modal window animation above parent#1381
zccrs merged 1 commit into
linuxdeepin:masterfrom
glyvut:master

Conversation

@glyvut

@glyvut glyvut commented Sep 8, 2026

Copy link
Copy Markdown
Contributor

Skip unmapped children in findModal() and restack the window animation above its target after stacking operations.

findModal() 跳过未映射的子窗口,并在叠放操作后把窗口动画
重新叠放到目标窗口之上。

Log: 修复模态窗口开关动画被主窗盖住的问题
PMS: BUG-296659
Influence: 模态对话框打开和关闭动画始终显示在主窗口之上,不再被遮挡。

Summary by Sourcery

Ensure modal window animations remain visible above their parent throughout stacking and modal-surface lookup.

Bug Fixes:

  • Keep modal window open and close animations above their target windows so they are not obscured.
  • Ignore unmapped child surfaces when locating modal descendants.

Enhancements:

  • Centralize window-animation restacking and apply it after stacking operations.

@sourcery-ai

sourcery-ai Bot commented Sep 8, 2026

Copy link
Copy Markdown
Reviewer's guide (collapsed on small PRs)

Reviewer's Guide

This PR keeps modal open and close animations visibly above their target windows by centralizing animation restacking and reapplying it after stacking operations, while making modal discovery ignore unmapped or unavailable child surfaces.

Sequence diagram for keeping modal animation above its target

sequenceDiagram
    participant Surface as SurfaceWrapper
    participant Animation as WindowAnimation
    participant Parent as ParentItem

    Surface->>Surface: stackBefore(item) or stackAfter(item)
    Surface->>Surface: updateSubSurfaceStacking()
    Surface->>Surface: restackWindowAnimationAbove()
    alt animation shares the parent item
        Surface->>Animation: stackAfter(this)
        Animation-->>Parent: Remains above target window
    end
Loading

Flow diagram for mapped modal surface discovery

flowchart TD
    Start["findModal()"] --> Child["Inspect child surface"]
    Child --> Removed{"Wrapper is about to be removed?"}
    Removed -->|Yes| Next["Skip child"]
    Removed -->|No| Mapped{"Surface exists and is mapped?"}
    Mapped -->|No| Next
    Mapped -->|Yes| Modal{"Child is modal?"}
    Modal -->|No| Next
    Modal -->|Yes| Deep["Search child findModal()"]
    Deep --> Result["Return active modal surface"]
    Next --> More{"More children?"}
    More -->|Yes| Child
    More -->|No| None["No modal surface found"]
Loading

File-Level Changes

Change Details Files
Centralize and reapply window-animation restacking so modal animations remain above their target after stacking changes.
  • Replace inline animation stacking with a dedicated helper.
  • Invoke the helper after stack-before, stack-after, and animation creation/closure operations.
  • Only restack when the animation and target share a valid parent item.
src/surface/surfacewrapper.cpp
src/surface/surfacewrapper.h
Exclude unavailable child surfaces from modal-surface discovery.
  • Skip children marked for removal.
  • Skip children without a surface or with an unmapped surface before evaluating modal state.
src/surface/surfacewrapper.cpp

Tips and commands

Interacting with Sourcery

  • Trigger a new review: Comment @sourcery-ai review on the pull request.
  • Continue discussions: Reply directly to Sourcery's review comments.
  • Generate a GitHub issue from a review comment: Ask Sourcery to create an
    issue from a review comment by replying to it. You can also reply to a
    review comment with @sourcery-ai issue to create an issue from it.
  • Generate a pull request title: Write @sourcery-ai anywhere in the pull
    request title to generate a title at any time. You can also comment
    @sourcery-ai title on the pull request to (re-)generate the title at any time.
  • Generate a pull request summary: Write @sourcery-ai summary anywhere in
    the pull request body to generate a PR summary at any time exactly where you
    want it. You can also comment @sourcery-ai summary on the pull request to
    (re-)generate the summary at any time.
  • Generate reviewer's guide: Comment @sourcery-ai guide on the pull
    request to (re-)generate the reviewer's guide at any time.
  • Resolve all Sourcery comments: Comment @sourcery-ai resolve on the
    pull request to resolve all Sourcery comments. Useful if you've already
    addressed all the comments and don't want to see them anymore.
  • Dismiss all Sourcery reviews: Comment @sourcery-ai dismiss on the pull
    request to dismiss all existing Sourcery reviews. Especially useful if you
    want to start fresh with a new review - don't forget to comment
    @sourcery-ai review to trigger a new review!

Customizing Your Experience

Access your dashboard to:

  • Enable or disable review features such as the Sourcery-generated pull request
    summary, the reviewer's guide, and others.
  • Change the review language.
  • Add, remove or edit custom review instructions.
  • Adjust other review settings.

Getting Help

@sourcery-ai sourcery-ai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Hey - I've reviewed your changes and they look great!


Sourcery is free for open source - if you like our reviews please consider sharing them ✨

@glyvut
glyvut marked this pull request as draft September 8, 2026 08:41
Skip unmapped children in findModal() and restack the window
animation above its target after stacking operations.

findModal() 跳过未映射的子窗口,并在叠放操作后把窗口动画
重新叠放到目标窗口之上。

Log: 修复模态窗口开关动画被主窗盖住的问题
PMS: BUG-296659
Influence: 模态对话框打开和关闭动画始终显示在主窗口之上,不再被遮挡。
@glyvut
glyvut marked this pull request as ready for review September 8, 2026 08:42

@sourcery-ai sourcery-ai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Hey - I've reviewed your changes and they look great!


Sourcery is free for open source - if you like our reviews please consider sharing them ✨

@deepin-ci-robot

Copy link
Copy Markdown

[APPROVALNOTIFIER] This PR is NOT APPROVED

This pull-request has been approved by: glyvut, Groveer

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

@zccrs
zccrs merged commit cb038ef into linuxdeepin:master Sep 8, 2026
7 checks passed
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.

4 participants