diff --git a/frame/util/multiscreenworker.cpp b/frame/util/multiscreenworker.cpp index 43cbe658c..07d5b039a 100644 --- a/frame/util/multiscreenworker.cpp +++ b/frame/util/multiscreenworker.cpp @@ -40,7 +40,6 @@ MultiScreenWorker::MultiScreenWorker(QWidget *parent, DWindowManagerHelper *help : QObject(nullptr) , m_parent(parent) , m_wmHelper(helper) - , m_xcbMisc(XcbMisc::instance()) , m_eventInter(new XEventMonitor("com.deepin.api.XEventMonitor", "/com/deepin/api/XEventMonitor", QDBusConnection::sessionBus())) , m_extralEventInter(new XEventMonitor("com.deepin.api.XEventMonitor", "/com/deepin/api/XEventMonitor", QDBusConnection::sessionBus())) , m_touchEventInter(new XEventMonitor("com.deepin.api.XEventMonitor", "/com/deepin/api/XEventMonitor", QDBusConnection::sessionBus())) @@ -72,7 +71,7 @@ MultiScreenWorker::MultiScreenWorker(QWidget *parent, DWindowManagerHelper *help MultiScreenWorker::~MultiScreenWorker() { - delete m_xcbMisc; + } void MultiScreenWorker::initShow() @@ -200,8 +199,10 @@ void MultiScreenWorker::onRegionMonitorChanged(int x, int y, const QString &key) return; // 鼠标按下状态不响应唤醒 - if (m_btnPress) + if (m_btnPress) { + qDebug() << "mouse pressed, should return"; return; + } tryToShowDock(x, y); } @@ -209,6 +210,8 @@ void MultiScreenWorker::onRegionMonitorChanged(int x, int y, const QString &key) // 鼠标在任务栏之外移动时,任务栏该响应隐藏时需要隐藏 void MultiScreenWorker::onExtralRegionMonitorChanged(int x, int y, const QString &key) { + Q_UNUSED(x); + Q_UNUSED(y); if (m_extralRegisterKey != key) return; @@ -229,7 +232,7 @@ void MultiScreenWorker::onMonitorListChanged(const QList &mons) return; QList ops; - for (const auto *mon : m_monitorInfo.keys()) + for (const auto *mon : m_mtrInfo.data().keys()) ops << mon->path(); QList pathList; @@ -243,8 +246,6 @@ void MultiScreenWorker::onMonitorListChanged(const QList &mons) for (auto op : ops) if (!pathList.contains(op)) monitorRemoved(op); - //更新dock的显示,https://pms.uniontech.com/zentao/bug-view-43166.html - m_monitorUpdateTimer->start(); } void MultiScreenWorker::monitorAdded(const QString &path) @@ -274,7 +275,7 @@ void MultiScreenWorker::monitorAdded(const QString &path) mon->setW(inter->width()); mon->setH(inter->height()); - m_monitorInfo.insert(mon, inter); + m_mtrInfo.insert(mon, inter); inter->setSync(false); } @@ -282,7 +283,7 @@ void MultiScreenWorker::monitorAdded(const QString &path) void MultiScreenWorker::monitorRemoved(const QString &path) { Monitor *monitor = nullptr; - for (auto it(m_monitorInfo.cbegin()); it != m_monitorInfo.cend(); ++it) { + for (auto it(m_mtrInfo.data().cbegin()); it != m_mtrInfo.data().cend(); ++it) { if (it.key()->path() == path) { monitor = it.key(); break; @@ -291,8 +292,8 @@ void MultiScreenWorker::monitorRemoved(const QString &path) if (!monitor) return; - m_monitorInfo.value(monitor)->deleteLater(); - m_monitorInfo.remove(monitor); + m_mtrInfo.data().value(monitor)->deleteLater(); + m_mtrInfo.remove(monitor); monitor->deleteLater(); } @@ -341,11 +342,15 @@ void MultiScreenWorker::onWindowSizeChanged(uint value) void MultiScreenWorker::primaryScreenChanged() { + // 先更新主屏信息 + m_ds.updatePrimary(m_displayInter->primary()); + const int screenRawHeight = m_displayInter->screenHeight(); const int screenRawWidth = m_displayInter->screenWidth(); // 无效值 if (screenRawHeight == 0 || screenRawWidth == 0) { + qDebug() << "screen raw data is not valid:" <enable() || !inter->dockPosition().docked(m_position)) continue; @@ -594,7 +599,7 @@ void MultiScreenWorker::onRequestUpdateRegionMonitor() } m_extralRectList.clear(); - foreach (Monitor *inter, validMonitorList(m_monitorInfo)) { + foreach (Monitor *inter, m_mtrInfo.validMonitor()) { // 屏幕不可用或此位置不可停靠时,不用监听这块区域 if (!inter->enable() || !inter->dockPosition().docked(m_position)) continue; @@ -643,7 +648,7 @@ void MultiScreenWorker::onRequestUpdateRegionMonitor() const int monitHeight = 100 + WINDOWMARGIN; // 任务栏触屏唤起区域 m_touchRectList.clear(); - foreach (Monitor *inter, validMonitorList(m_monitorInfo)) { + foreach (Monitor *inter, m_mtrInfo.validMonitor()) { // 屏幕不可用或此位置不可停靠时,不用监听这块区域 if (!inter->enable() || !inter->dockPosition().docked(m_position)) continue; @@ -708,11 +713,13 @@ void MultiScreenWorker::onRequestUpdateFrontendGeometry() void MultiScreenWorker::onRequestNotifyWindowManager() { // 先清除原先的窗管任务栏区域 - m_xcbMisc->clear_strut_partial(xcb_window_t(parent()->winId())); + XcbMisc::instance()->clear_strut_partial(xcb_window_t(parent()->winId())); // 在副屏时,且为一直显示时,不要挤占应用,这是sp3的新需求 - if (m_ds.current() != qApp->primaryScreen()->name() && m_hideMode == HideMode::KeepShowing) + if (m_ds.current() != qApp->primaryScreen()->name() && m_hideMode == HideMode::KeepShowing) { + qDebug() << "don`t set dock area"; return; + } // 除了"一直显示"模式,其他的都不要设置任务栏区域 if (m_hideMode != Dock::KeepShowing) @@ -756,10 +763,8 @@ void MultiScreenWorker::onRequestNotifyWindowManager() break; } -#ifdef QT_DEBUG qDebug() << strut << strutStart << strutEnd; -#endif - m_xcbMisc->set_strut_partial(parent()->winId(), orientation, strut + WINDOWMARGIN * ratio, strutStart, strutEnd); + XcbMisc::instance()->set_strut_partial(parent()->winId(), orientation, strut + WINDOWMARGIN * ratio, strutStart, strutEnd); } void MultiScreenWorker::onRequestUpdatePosition(const Position &fromPos, const Position &toPos) @@ -776,17 +781,10 @@ void MultiScreenWorker::onRequestUpdatePosition(const Position &fromPos, const P void MultiScreenWorker::onRequestUpdateMonitorInfo() { -#ifdef QT_DEBUG - foreach (auto monitor, m_monitorInfo.keys()) { - qDebug() << monitor->name() << monitor->enable(); - } -#endif // 双屏,复制模式,两个屏幕的信息是一样的 - if (validMonitorList(m_monitorInfo).size() == 2 - && validMonitorList(m_monitorInfo).first()->rect() == validMonitorList(m_monitorInfo).last()->rect()) { -#ifdef QT_DEBUG + if (m_mtrInfo.validMonitor().size() == 2 + && m_mtrInfo.validMonitor().first()->rect() == m_mtrInfo.validMonitor().last()->rect()) { qDebug() << "repeat screen"; -#endif return; } @@ -795,7 +793,7 @@ void MultiScreenWorker::onRequestUpdateMonitorInfo() void MultiScreenWorker::updateMonitorDockedInfo() { - QListscreens = validMonitorList(m_monitorInfo); + QListscreens = m_mtrInfo.validMonitor(); if (screens.size() == 1) { // 只剩下一个可用的屏幕 @@ -806,9 +804,7 @@ void MultiScreenWorker::updateMonitorDockedInfo() // 最多支持双屏,这里只计算双屏,单屏默认四边均可停靠任务栏 if (screens.size() != 2) { -#ifdef QT_DEBUG qDebug() << "screen count:" << screens.count(); -#endif return; } @@ -827,27 +823,18 @@ void MultiScreenWorker::updateMonitorDockedInfo() // 对角拼接,重置,默认均可停靠 if (s1->bottomRight() == s2->topLeft() || s1->topLeft() == s2->bottomRight()) { -#ifdef QT_DEBUG - qDebug() << "diagonal: " << s1->rect() << s2->rect(); -#endif return; } // 左右拼接,s1左,s2右 if (s1->right() == s2->left() && (s1->topRight() == s2->topLeft() || s1->bottomRight() == s2->bottomLeft())) { -#ifdef QT_DEBUG - qDebug() << "horizontal: " << s1->rect() << s2->rect(); -#endif s1->dockPosition().rightDock = false; s2->dockPosition().leftDock = false; } // 左右拼接,s1右,s2左 if (s1->left() == s2->right() && (s1->topLeft() == s2->topRight() || s1->bottomLeft() == s2->bottomRight())) { -#ifdef QT_DEBUG - qDebug() << "horizontal: " << s1->rect() << s2->rect(); -#endif s1->dockPosition().leftDock = false; s2->dockPosition().rightDock = false; } @@ -855,9 +842,6 @@ void MultiScreenWorker::updateMonitorDockedInfo() // 上下拼接,s1上,s2下 if (s1->bottom() == s2->top() && (s1->bottomLeft() == s2->topLeft() || s1->bottomRight() == s2->topRight())) { -#ifdef QT_DEBUG - qDebug() << "vertical: " << s1->rect() << s2->rect(); -#endif s1->dockPosition().bottomDock = false; s2->dockPosition().topDock = false; } @@ -865,9 +849,6 @@ void MultiScreenWorker::updateMonitorDockedInfo() // 上下拼接,s1下,s2上 if (s1->top() == s2->bottom() && (s1->topLeft() == s2->bottomLeft() || s1->topRight() == s2->bottomRight())) { -#ifdef QT_DEBUG - qDebug() << "vertical: " << s1->rect() << s2->rect(); -#endif s1->dockPosition().topDock = false; s2->dockPosition().bottomDock = false; } @@ -880,11 +861,9 @@ void MultiScreenWorker::onRequestDelayShowDock(const QString &screenName) return; // 复制模式.不需要响应切换屏幕 - QList monitorList = validMonitorList(m_monitorInfo); + QList monitorList = m_mtrInfo.validMonitor(); if (monitorList.size() == 2 && monitorList.first()->rect() == monitorList.last()->rect()) { -#ifdef QT_DEBUG qDebug() << "copy mode or merge mode"; -#endif parent()->setFixedSize(dockRect(m_ds.current()).size()); parent()->setGeometry(dockRect(m_ds.current())); return; @@ -892,7 +871,7 @@ void MultiScreenWorker::onRequestDelayShowDock(const QString &screenName) m_ds.updateDockedScreen(screenName); - Monitor *currentMonitor = monitorByName(validMonitorList(m_monitorInfo), screenName); + Monitor *currentMonitor = monitorByName(m_mtrInfo.validMonitor(), screenName); if (!currentMonitor) { qDebug() << "cannot find monitor by name: " << screenName; return; @@ -922,7 +901,7 @@ void MultiScreenWorker::initMembers() m_delayTimer->setSingleShot(true); // 设置应用角色为任务栏 - m_xcbMisc->set_window_type(xcb_window_t(parent()->winId()), XcbMisc::Dock); + XcbMisc::instance()->set_window_type(xcb_window_t(parent()->winId()), XcbMisc::Dock); // 初始化动画信息 m_showAni->setEasingCurve(QEasingCurve::InOutCubic); @@ -956,7 +935,6 @@ void MultiScreenWorker::initConnection() { connect(m_showAni, &QVariantAnimation::valueChanged, this, static_cast(&MultiScreenWorker::updateParentGeometry)); connect(m_hideAni, &QVariantAnimation::valueChanged, this, static_cast(&MultiScreenWorker::updateParentGeometry)); - connect(m_showAni, &QVariantAnimation::finished, this, &MultiScreenWorker::showAniFinished); connect(m_hideAni, &QVariantAnimation::finished, this, &MultiScreenWorker::hideAniFinished); @@ -1005,9 +983,6 @@ void MultiScreenWorker::initConnection() connect(m_displayInter, &DisplayInter::ScreenHeightChanged, this, &MultiScreenWorker::primaryScreenChanged, Qt::QueuedConnection); connect(m_displayInter, &DisplayInter::ScreenWidthChanged, this, &MultiScreenWorker::primaryScreenChanged, Qt::QueuedConnection); connect(m_displayInter, &DisplayInter::PrimaryChanged, this, &MultiScreenWorker::primaryScreenChanged, Qt::QueuedConnection); - connect(m_displayInter, &DisplayInter::PrimaryChanged, this, [ = ] { - m_ds.updatePrimary(m_displayInter->primary()); - }); connect(m_eventInter, &XEventMonitor::CursorMove, this, &MultiScreenWorker::onRegionMonitorChanged); connect(m_eventInter, &XEventMonitor::ButtonPress, this, [ = ] {m_btnPress = true;}); @@ -1015,6 +990,9 @@ void MultiScreenWorker::initConnection() connect(m_extralEventInter, &XEventMonitor::CursorMove, this, &MultiScreenWorker::onExtralRegionMonitorChanged); + // 屏幕信息变化后应更新一下任务栏的显示 + connect(&m_mtrInfo, &MonitorInfo::monitorChanged, this, &MultiScreenWorker::requestUpdateMonitorInfo); + connect(this, &MultiScreenWorker::requestUpdateRegionMonitor, this, &MultiScreenWorker::onRequestUpdateRegionMonitor); connect(this, &MultiScreenWorker::requestUpdateFrontendGeometry, this, &MultiScreenWorker::onRequestUpdateFrontendGeometry); connect(this, &MultiScreenWorker::requestUpdatePosition, this, &MultiScreenWorker::onRequestUpdatePosition); @@ -1148,7 +1126,7 @@ void MultiScreenWorker::changeDockPosition(QString fromScreen, QString toScreen, // 更新屏幕信息 m_ds.updateDockedScreen(toScreen); - // TODO: 考虑切换过快的情况,这里需要停止上一次的动画,可增加信息号控制,暂时无需要 + // TODO: 考虑切换过快的情况,这里需要停止上一次的动画,可增加信号控制,暂时无需要 qDebug() << "from: " << fromScreen << " to: " << toScreen; QSequentialAnimationGroup *group = new QSequentialAnimationGroup(this); @@ -1173,18 +1151,14 @@ void MultiScreenWorker::changeDockPosition(QString fromScreen, QString toScreen, // 隐藏 ani1->setStartValue(getDockShowGeometry(fromScreen, fromPos, m_displayMode)); ani1->setEndValue(getDockHideGeometry(fromScreen, fromPos, m_displayMode)); -#ifdef QT_DEBUG qDebug() << fromScreen << "hide from :" << getDockShowGeometry(fromScreen, fromPos, m_displayMode); qDebug() << fromScreen << "hide to :" << getDockHideGeometry(fromScreen, fromPos, m_displayMode); -#endif // 显示 ani2->setStartValue(getDockHideGeometry(toScreen, toPos, m_displayMode)); ani2->setEndValue(getDockShowGeometry(toScreen, toPos, m_displayMode)); -#ifdef QT_DEBUG qDebug() << toScreen << "show from :" << getDockHideGeometry(toScreen, toPos, m_displayMode); qDebug() << toScreen << "show to :" << getDockShowGeometry(toScreen, toPos, m_displayMode); -#endif group->addAnimation(ani1); group->addAnimation(ani2); @@ -1197,8 +1171,8 @@ void MultiScreenWorker::changeDockPosition(QString fromScreen, QString toScreen, } }); - connect(ani1, &QVariantAnimation::valueChanged, this, [ = ](const QVariant &value){ - updateParentGeometry(value,fromPos); + connect(ani1, &QVariantAnimation::valueChanged, this, [ = ](const QVariant & value) { + updateParentGeometry(value, fromPos); }); // 显示时固定一下内容大小 @@ -1213,8 +1187,8 @@ void MultiScreenWorker::changeDockPosition(QString fromScreen, QString toScreen, } }); - connect(ani2, &QVariantAnimation::valueChanged, this, [ = ](const QVariant &value){ - updateParentGeometry(value,toPos); + connect(ani2, &QVariantAnimation::valueChanged, this, [ = ](const QVariant & value) { + updateParentGeometry(value, toPos); }); // 如果更改了显示位置,在显示之前应该更新一下界面布局方向 @@ -1222,7 +1196,7 @@ void MultiScreenWorker::changeDockPosition(QString fromScreen, QString toScreen, connect(ani1, &QVariantAnimation::finished, this, [ = ] { // 先清除原先的窗管任务栏区域 - m_xcbMisc->clear_strut_partial(xcb_window_t(parent()->winId())); + XcbMisc::instance()->clear_strut_partial(xcb_window_t(parent()->winId())); // 隐藏后需要通知界面更新布局方向 emit requestUpdateLayout(); @@ -1253,7 +1227,7 @@ void MultiScreenWorker::updateDockScreenName(const QString &screenName) QString MultiScreenWorker::getValidScreen(const Position &pos) { - QList monitorList = validMonitorList(m_monitorInfo); + QList monitorList = m_mtrInfo.validMonitor(); // 查找主屏 QString primaryName; foreach (auto monitor, monitorList) { @@ -1268,7 +1242,7 @@ QString MultiScreenWorker::getValidScreen(const Position &pos) return QString(); } - Monitor *primaryMonitor = monitorByName(validMonitorList(m_monitorInfo), primaryName); + Monitor *primaryMonitor = monitorByName(m_mtrInfo.validMonitor(), primaryName); if (!primaryMonitor) { qDebug() << "cannot find monitor by name: " << primaryName; return QString(); @@ -1290,9 +1264,9 @@ QString MultiScreenWorker::getValidScreen(const Position &pos) void MultiScreenWorker::autosetDockScreen() { - QList monitorList = validMonitorList(m_monitorInfo); + QList monitorList = m_mtrInfo.validMonitor(); if (monitorList.size() == 2) { - Monitor *primaryMonitor = monitorByName(validMonitorList(m_monitorInfo), m_ds.primary()); + Monitor *primaryMonitor = monitorByName(m_mtrInfo.validMonitor(), m_ds.primary()); if (!primaryMonitor) { qDebug() << "cannot find monitor by name: " << m_ds.primary(); return; @@ -1302,9 +1276,7 @@ void MultiScreenWorker::autosetDockScreen() if (monitor->name() != m_ds.current() && monitor->dockPosition().docked(position())) { m_ds.updateDockedScreen(monitor->name()); -#ifdef QT_DEBUG qDebug() << "update dock screen: " << monitor->name(); -#endif } } } @@ -1351,7 +1323,7 @@ QRect MultiScreenWorker::getDockShowGeometry(const QString &screenName, const Po const qreal scale = qApp->devicePixelRatio(); QRect rect; if (withoutScale) {//后端真实大小 - foreach (Monitor *inter, validMonitorList(m_monitorInfo)) { + foreach (Monitor *inter, m_mtrInfo.validMonitor()) { if (inter->name() == screenName) { // windowSizeFashion和windowSizeEfficient给出的值始终对应前端认为的界面高度或宽度(受缩放影响) const int dockSize = int(displaymode == DisplayMode::Fashion ? m_dockInter->windowSizeFashion() : m_dockInter->windowSizeEfficient()) * scale; @@ -1388,7 +1360,7 @@ QRect MultiScreenWorker::getDockShowGeometry(const QString &screenName, const Po } } } else {//前端真实大小 - foreach (Monitor *inter, validMonitorList(m_monitorInfo)) { + foreach (Monitor *inter, m_mtrInfo.validMonitor()) { if (inter->name() == screenName) { // windowSizeFashion和windowSizeEfficient给出的值始终对应前端认为的界面高度或宽度(受缩放影响) const int dockSize = int(displaymode == DisplayMode::Fashion ? m_dockInter->windowSizeFashion() : m_dockInter->windowSizeEfficient()); @@ -1434,7 +1406,7 @@ QRect MultiScreenWorker::getDockHideGeometry(const QString &screenName, const Po const qreal scale = qApp->devicePixelRatio(); QRect rect; if (withoutScale) {//后端真实大小 - foreach (Monitor *inter, validMonitorList(m_monitorInfo)) { + foreach (Monitor *inter, m_mtrInfo.validMonitor()) { if (inter->name() == screenName) { const int margin = (displaymode == DisplayMode::Fashion ? WINDOWMARGIN : 0); @@ -1471,7 +1443,7 @@ QRect MultiScreenWorker::getDockHideGeometry(const QString &screenName, const Po } } } else {//前端真实大小 - foreach (Monitor *inter, validMonitorList(m_monitorInfo)) { + foreach (Monitor *inter, m_mtrInfo.validMonitor()) { if (inter->name() == screenName) { const int margin = (displaymode == DisplayMode::Fashion ? WINDOWMARGIN : 0); @@ -1610,18 +1582,6 @@ const QPoint MultiScreenWorker::scaledPos(const QPoint &rawXPos) : rawXPos; } -QList MultiScreenWorker::validMonitorList(const QMap &map) -{ - QList list; - QMapIteratorit(map); - while (it.hasNext()) { - it.next(); - if (it.key()->enable()) - list << it.key(); - } - return list; -} - void MultiScreenWorker::onTouchPress(int type, int x, int y, const QString &key) { Q_UNUSED(type); @@ -1717,25 +1677,19 @@ void MultiScreenWorker::tryToShowDock(int eventX, int eventY) } else { // 任务栏隐藏状态,但需要显示 if (hideMode() == HideMode::KeepShowing) { -#ifdef QT_DEBUG qDebug() << "showing"; -#endif parent()->setFixedSize(dockRect(m_ds.current()).size()); parent()->setGeometry(dockRect(m_ds.current())); return; } if (m_showAni->state() == QVariantAnimation::Running) { -#ifdef QT_DEBUG qDebug() << "animation is running"; -#endif return; } const QRect boundRect = parent()->visibleRegion().boundingRect(); -#ifdef QT_DEBUG qDebug() << "boundRect:" << boundRect; -#endif if ((m_hideMode == HideMode::KeepHidden || m_hideMode == HideMode::SmartHide) && (boundRect.size().isEmpty())) { showAni(m_ds.current()); diff --git a/frame/util/multiscreenworker.h b/frame/util/multiscreenworker.h index 1c1b25fa4..e12b253fa 100644 --- a/frame/util/multiscreenworker.h +++ b/frame/util/multiscreenworker.h @@ -59,9 +59,79 @@ class QWidget; class QTimer; class MainWindow; -class DockScreen : QObject +/** + * @brief The MonitorInfo class + * 保存显示器信息 + */ +class MonitorInfo : public QObject { Q_OBJECT +public: + explicit MonitorInfo() {} + + /** + * @brief data + * @return 所有的显示器信息 + */ + inline const QMap data() {return m_monitorInfo;} + + /** + * @brief validMonitor + * @return 返回一个列表,包含所有可用的显示器 + */ + const QList validMonitor() + { + QList list; + QMapIteratorit(m_monitorInfo); + while (it.hasNext()) { + it.next(); + if (it.key()->enable()) + list << it.key(); + } + return list; + } + + /** + * @brief insert 插入新的屏幕信息 + * @param mon 插入的屏幕信息 + * @param monInter 插入的屏幕对应的dbus指针 + */ + void insert(Monitor *mon, MonitorInter *monInter) + { + m_monitorInfo.insert(mon, monInter); + + Q_EMIT monitorChanged(); + } + + /** + * @brief remove 删除显示其信息 + * @param mon 待删除的数据 + */ + void remove(Monitor *mon) + { + m_monitorInfo.value(mon)->deleteLater(); + m_monitorInfo.remove(mon); + mon->deleteLater(); + + Q_EMIT monitorChanged(); + } + +signals: + /** + * @brief monitorChanged 显示器信息发生变化 + */ + void monitorChanged(); + +private: + QMap m_monitorInfo; +}; + +/** + * @brief The DockScreen class + * 保存任务栏的屏幕信息 + */ +class DockScreen +{ public: explicit DockScreen(const QString ¤t, const QString &last, const QString &primary) : m_currentScreen(current) @@ -176,7 +246,7 @@ signals: void displayModeChanegd(); // 更新监视区域 - void requestUpdateRegionMonitor(); + void requestUpdateRegionMonitor(); // 更新监听区域 void requestUpdateFrontendGeometry(); //!!! 给后端的区域不能为是或宽度为0的区域,否则会带来HideState死循环切换的bug void requestNotifyWindowManager(); void requestUpdatePosition(const Position &fromPos, const Position &toPos); @@ -311,23 +381,20 @@ private: bool contains(const QList &rectList, const QPoint &pos); const QPoint rawXPosition(const QPoint &scaledPos); const QPoint scaledPos(const QPoint &rawXPos); - QList validMonitorList(const QMap &map); private: QWidget *m_parent; DWindowManagerHelper *m_wmHelper; - XcbMisc *m_xcbMisc; // monitor screen XEventMonitor *m_eventInter; XEventMonitor *m_extralEventInter; - // 触控屏唤起任务栏监控区域接口 XEventMonitor *m_touchEventInter; // DBus interface DBusDock *m_dockInter; DisplayInter *m_displayInter; - DBusLuncher* m_launcherInter; + DBusLuncher *m_launcherInter; // update monitor info QTimer *m_monitorUpdateTimer; @@ -339,6 +406,8 @@ private: // 屏幕名称信息 DockScreen m_ds; + // 显示器信息 + MonitorInfo m_mtrInfo; // 任务栏属性 double m_opacity; @@ -346,10 +415,7 @@ private: HideMode m_hideMode; HideState m_hideState; DisplayMode m_displayMode; - /** - * @brief m_monitorInfo 屏幕信息(注意需要保证内容实时更新,且有效) - */ - QMap m_monitorInfo; + /***************不和其他流程产生交互,尽量不要动这里的变量***************/ int m_screenRawHeight; int m_screenRawWidth; @@ -360,13 +426,12 @@ private: bool m_draging; // 鼠标是否正在调整任务栏的宽度或高度 bool m_autoHide; // 和MenuWorker保持一致,为false时表示菜单已经打开 bool m_btnPress; // 鼠标按下时移动到唤醒区域不应该响应唤醒 + bool m_touchPress; // 触屏按下 + QPoint m_touchPos; // 触屏按下坐标 QList m_monitorRectList; // 监听唤起任务栏区域 QList m_extralRectList; // 任务栏外部区域,随m_monitorRectList一起更新 QList m_touchRectList; // 监听触屏唤起任务栏区域 QString m_delayScreen; // 任务栏将要切换到的屏幕名 - - bool m_touchPress; // 触屏按下 - QPoint m_touchPos; // 触屏按下坐标 /*****************************************************************/ }; diff --git a/frame/window/mainwindow.cpp b/frame/window/mainwindow.cpp index 31c616041..0253190ab 100755 --- a/frame/window/mainwindow.cpp +++ b/frame/window/mainwindow.cpp @@ -429,6 +429,7 @@ void MainWindow::onMainWindowSizeChanged(QPoint offset) void MainWindow::onDragFinished() { + qDebug() << "drag finished"; resetDragWindow(); }