mirror of
https://github.com/linuxdeepin/dde-dock.git
synced 2025-06-04 09:23:03 +00:00

qt事件转发可能存在bug,触屏移动事件几率会转发出一个普通鼠标移动事件,导致显示hover时判断错误,通过后端触屏事件与qt转发触屏事件并集判断为鼠标事件 Log: 解决任务栏触屏几率会出现hover效果 Bug: https://pms.uniontech.com/zentao/bug-view-47597.html Bug: https://pms.uniontech.com/zentao/bug-view-46245.html Change-Id: Ibae1134fd231c29301cbb54d28d7688984601143 Reviewed-on: http://gerrit.uniontech.com/c/dde-dock/+/4825 Reviewed-by: <mailman@uniontech.com> Reviewed-by: wangwei <wangwei@uniontech.com> Reviewed-by: fanpengcheng <fanpengcheng@uniontech.com> Tested-by: <mailman@uniontech.com>
33 lines
998 B
C++
33 lines
998 B
C++
#include "dockapplication.h"
|
||
#include "constants.h"
|
||
|
||
#include <QMouseEvent>
|
||
#include <QTouchEvent>
|
||
|
||
DockApplication::DockApplication(int &argc, char **argv) : DApplication (argc, argv)
|
||
{
|
||
}
|
||
|
||
bool DockApplication::notify(QObject *obj, QEvent *event)
|
||
{
|
||
QMouseEvent *mouseEvent = dynamic_cast<QMouseEvent *>(event);
|
||
|
||
if (mouseEvent) {
|
||
// 鼠标事件可以通过source函数确定是否触屏事件,并将结果写入qApp的动态属性中
|
||
const Qt::MouseEventSource src = mouseEvent->source();
|
||
if (src == Qt::MouseEventSynthesizedByQt || src == Qt::MouseEventSynthesizedByApplication) {
|
||
qApp->setProperty(IS_TOUCH_STATE, true);
|
||
} else {
|
||
qApp->setProperty(IS_TOUCH_STATE, false);
|
||
}
|
||
}
|
||
|
||
// 任务栏屏蔽多指触控
|
||
QTouchEvent *touchEvent = dynamic_cast<QTouchEvent *>(event);
|
||
if(touchEvent && (touchEvent->touchPoints().size() > 1)) {
|
||
return true;
|
||
}
|
||
|
||
return DApplication::notify(obj, event);
|
||
}
|