linuxdeepin / developer-center

Deepin developer center, provide developer wiki and community forum.
453 stars 73 forks source link

【deepin_V23_beta2】【一般】【紧急】【预发布测试】【DDE】【控制中心】最小化效果为缩放模式,窗口最大化时进行最小化操作缩放效果异常 #5627

Closed xuqi27837288 closed 10 months ago

xuqi27837288 commented 1 year ago

SUMMARY | 问题概要

必现问题

SOFTWARE/OS VERSIONS | 软件/系统版本信息

https://packagesupdate.uniontech.com/repo/uos-professional/image-beige/CUSTOM/lichenggang/20230908/deepin-23-beige-beta2-amd64-20230908-160331.iso

控制中心:6.0.27

PRE-REQUIREMENT | 预置条件

控制中心-个性化-桌面-最小化时效果设置为缩放

STEPS TO REPRODUCE | 复现步骤

将文管或控制中心最大化后,进行最小化操作,观察此时的最小化效果

OBSERVED RESULT | 观察到的结果

窗口最小化时会在屏幕中间停留后再缩放至任务栏上

https://github.com/linuxdeepin/developer-center/assets/62528742/f4721e07-58ca-45c5-9c2f-da8c211eb009

EXPECTED RESULT | 期望的结果

窗口最小化时直接缩放至任务栏上(可以对比窗口未最大化时进行缩放操作的效果)

ADDITIONAL INFORMATION | 额外补充

No response

kegechen commented 1 year ago

最大化的窗口看起来有个先「还原」然后「最小化」的操作。 普通大小窗口则直接开始最小化动画

kegechen commented 1 year ago

确实是有主动去去掉最大化然后最小化。 QXcbWindow::setWindowState 里面有个 unset old state 然后 set new state 的操作

void QXcbWindow::setWindowState(Qt::WindowStates state)
{
...
 // unset old state
if (m_windowState & Qt::WindowMaximized)
        setNetWmState(false,
                      atom(QXcbAtom::_NET_WM_STATE_MAXIMIZED_HORZ),
                      atom(QXcbAtom::_NET_WM_STATE_MAXIMIZED_VERT));
// set new state
    if (state & Qt::WindowMinimized) {
        {
            xcb_client_message_event_t event;

            event.response_type = XCB_CLIENT_MESSAGE;
            event.format = 32;
            event.sequence = 0;
            event.window = m_window;
            event.type = atom(QXcbAtom::WM_CHANGE_STATE);
            event.data.data32[0] = XCB_ICCCM_WM_STATE_ICONIC;
            event.data.data32[1] = 0;
            event.data.data32[2] = 0;
            event.data.data32[3] = 0;
            event.data.data32[4] = 0;

            xcb_send_event(xcb_connection(), 0, xcbScreen()->root(),
                           XCB_EVENT_MASK_STRUCTURE_NOTIFY | XCB_EVENT_MASK_SUBSTRUCTURE_REDIRECT,
                           (const char *)&event);
        }
        m_minimized = true;
    }
...
}

通过 Qt (5.15)接口最小化会还原然后最小化,Qt 5.11 就没有这种逻辑。 所以 v20 没有这种效果,v23 看起来就是有点异常。

kegechen commented 1 year ago

https://codereview.qt-project.org/c/qt/qtbase/+/331229 这个提交

BLumia commented 1 year ago

Arch 的 qt 应该是包含那个提交的(参见),但 Arch 上的 kde/kwin 在最小化一个最大化的窗口时,没有这个问题。

kegechen commented 1 year ago

archlinux在 xfce4 下运行 kwin(5.27.1),运行示例也是一样可以验证此问题,确实是Qt最小化时额外的动作造成。

kegechen commented 1 year ago

https://codereview.qt-project.org/c/qt/qtbase/+/504136 已经提交修复

kegechen commented 1 year ago

@Dami-star 该提交已经合并,可以patch到 v23 上的 qt 上

LiHua000 commented 1 year ago

代码已合入,本地测试已经达到需求。文管和控制中心的表现正常

kegechen commented 11 months ago

@xuqi27837288 跟进一下是否集成,集成后可以在 qt 5.15.8-1+deepin2 及以后版本回归测试

xuqi27837288 commented 11 months ago

@kegechen 当前不满足回归测试条件,暂无环境可以测试,提交集成后再走单进行回归测试,谢谢~

kegechen commented 11 months ago

@LiHua000 Qt 的集成搞一下吧,别忘了带上这个 issue

Zeno-sole commented 11 months ago

当前Beta2还是qt 5.15.7,待仓库冻结完毕后整体包含qt 5.15.8一起集成

kegechen commented 10 months ago

集成完到测试回归 @Zeno-sole

Zeno-sole commented 10 months ago

@babyfengfjx 请使用beta3镜像验证,该版本已合入

babyfengfjx commented 10 months ago

@xuqi27837288 请在最新镜像回归验证。

xuqi27837288 commented 10 months ago

【验证环境】:v23 beta3镜像 镜像:https://packagesupdate.uniontech.com/repo/uos-professional/image-beige/CUSTOM/lichenggang/20240102 仓库:deb https://ci.deepin.com/repo/deepin/deepin-community/testing/ unstable main dde community commercial 内核:Linux test-PC 6.6.7-amd64-desktop-hwe 【验证步骤】:问题单中描述的步骤 【验证结果】:回归测试通过 【截图录屏】:

录屏_选择区域_20240103172009