Revert "feat: 修复任务栏崩溃问题"

This reverts commit 84b7b5e288b770f92eea02c2cd8b3f646d5a03ac.

Change-Id: I8de1c26ff0e27d394b56ee476c35fcf2a90bb5c6
This commit is contained in:
songwentao 2021-11-19 16:06:24 +08:00
parent 29e391fc54
commit 169f0deed4
3 changed files with 44 additions and 11 deletions

View File

@ -71,9 +71,9 @@ private:
void onTrayWidgetClicked();
private:
// 动态加载的插件内存空间与dock进程内存空间相互独立创建手势服务监听触摸按下动作
QPointer<AbstractTrayWidget> m_absTrayWidget;
// 动态加载的插件内存空间与dock进程内存空间相互独立创建手势服务监听触摸按下动作
QPointer<TouchSignalManager> m_touchSignalManager;
QVBoxLayout *m_layout;

View File

@ -49,7 +49,6 @@ SNITrayWidget::SNITrayWidget(const QString &sniServicePath, QWidget *parent)
, m_popupTipsDelayTimer(new QTimer(this))
, m_handleMouseReleaseTimer(new QTimer(this))
, m_tipsLabel(new TipsWidget(this))
, m_menuState(false)
{
m_popupTipsDelayTimer->setInterval(500);
m_popupTipsDelayTimer->setSingleShot(true);
@ -339,13 +338,12 @@ void SNITrayWidget::showContextMenu(int x, int y)
// 第三方的右键菜单事件过滤方式无法捕获修改x,y值不能改变菜单弹出位置
if (m_sniMenuPath.path().startsWith("/NO_DBUSMENU")) {
m_sniInter->ContextMenu(x, y);
m_menuState = false;
} else {
m_menuState = true;
if (!m_menu) {
qDebug() << "context menu has not be ready, init menu";
initMenu();
}
if (m_menu)
m_menu->popup(QPoint(x, y));
}
@ -737,17 +735,55 @@ bool SNITrayWidget::eventFilter(QObject *watched, QEvent *event)
if (!m_menu)
return QWidget::eventFilter(watched, event);
QPoint startPos = QPoint();
if (!watched->objectName().startsWith("sniMenu")) {
if (event->type() == QEvent::MouseButtonPress) {
QMouseEvent *mouseEvent = static_cast<QMouseEvent *>(event);
if (mouseEvent->button() == Qt::LeftButton) {
// 只处理qt右键菜单外部菜单无法处理
if (m_menuState)
if (m_sniMenuPath.path().startsWith("/NO_DBUSMENU")) {
// 关闭中文输入法或者五笔输入法,当前的关闭方式无效
QMouseEvent *pressEvent = new QMouseEvent(QEvent::MouseButtonPress, mapToGlobal(this->pos()), Qt::LeftButton, Qt::LeftButton, Qt::NoModifier);
qApp->postEvent(this->parentWidget(), pressEvent);
} else {
m_menu->hide();
}
}
} else if (event->type() == QEvent::DragMove) {
if (m_menuState)
startPos = mouseEvent->pos();
} else if (event->type() == QEvent::DragMove || event->type() == QEvent::Move) {
if (m_sniMenuPath.path().startsWith("/NO_DBUSMENU")) {
// 关闭中文输入法或者五笔输入法,当前的关闭方式无效
QMouseEvent *pressEvent = new QMouseEvent(QEvent::MouseButtonPress, mapToGlobal(this->pos()), Qt::LeftButton, Qt::LeftButton, Qt::NoModifier);
qApp->postEvent(this->parentWidget(), pressEvent);
} else {
m_menu->hide();
}
}
// 让click无效,避免点击到插件上
if (event->type() == QEvent::MouseButtonRelease) {
QMouseEvent *mouseEvent = static_cast<QMouseEvent *>(event);
if (mouseEvent->source() == Qt::MouseEventSynthesizedByQt) {
if (isVisible())
return true;
}
}
// 处理当右键菜单显示时,esc按下关闭右键菜单保持和模态框一样的效果
if (event->type() == QEvent::KeyPress) {
QKeyEvent *keyEvent = static_cast<QKeyEvent *>(event);
if (keyEvent->key() == Qt::Key_Escape) {
if (!isVisible())
return false;
if (m_sniMenuPath.path().startsWith("/NO_DBUSMENU")) {
// 关闭中文输入法或者五笔输入法,当前的关闭方式无效
QMouseEvent *pressEvent = new QMouseEvent(QEvent::MouseButtonPress, mapToGlobal(this->pos()), Qt::LeftButton, Qt::LeftButton, Qt::NoModifier);
qApp->postEvent(this->parentWidget(), pressEvent);
} else {
m_menu->hide();
}
return true;
}
}
}

View File

@ -151,9 +151,6 @@ private:
static QPointer<DockPopupWindow> PopupWindow;
Dock::TipsWidget *m_tipsLabel;
bool m_popupShown;
// qt右键菜单: true, 外部菜单: false
bool m_menuState;
};
#endif /* SNIWIDGET_H */