Skip to content

Commit fca251c

Browse files
JiDe Zhangzccrs
authored andcommitted
fix: num-lock can't enable
pms: BUG-303949
1 parent edb5751 commit fca251c

File tree

2 files changed

+25
-0
lines changed

2 files changed

+25
-0
lines changed

panels/dock/CMakeLists.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -156,6 +156,7 @@ target_link_libraries(dock-plugin PUBLIC
156156
PRIVATE
157157
PkgConfig::WaylandClient
158158
Qt${QT_VERSION_MAJOR}::WaylandCompositorPrivate
159+
Qt${QT_VERSION_MAJOR}::GuiPrivate
159160
)
160161

161162
target_include_directories(dock-plugin

panels/dock/pluginmanagerextension.cpp

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,13 @@
1818
#include <QJsonObject>
1919
#include <QJsonParseError>
2020

21+
#define protected public
22+
#include <private/qwaylandcompositor_p.h>
23+
#undef protected
24+
#include <qpa/qwindowsysteminterface_p.h>
25+
#include <private/qwlqtkey_p.h>
26+
#include <private/qwlqttouch_p.h>
27+
2128
DGUI_USE_NAMESPACE
2229

2330
PluginScaleManager::PluginScaleManager(QWaylandCompositor *compositor)
@@ -388,6 +395,23 @@ PluginManager::PluginManager(QWaylandCompositor *compositor)
388395
QObject::connect(theme, &DPlatformTheme::darkActiveColorChanged, this, &PluginManager::onActiveColorChanged);
389396
QObject::connect(theme, &DPlatformTheme::themeNameChanged, this, &PluginManager::onThemeChanged);
390397
QObject::connect(theme, &DPlatformTheme::iconThemeNameChanged, this, &PluginManager::onThemeChanged);
398+
399+
// ###(zccrs): 在dde-shell中不要使用QWaylandCompositor的event handler,它会对key event进行
400+
// 特殊处理,会丢弃掉原生事件的信息,仅根据 native scan key code 通过xkb生成原始key event向
401+
// dde-shell 传递,这会导致需要状态切换后进行输入的字符丢失信息,比如外部环境打开NumLock后,小键盘
402+
// 的数字输入会被event handler转成原始事件,丢失了NumLock的开关信息。
403+
// dde-shell不是一个独立的合成器,所以不需要额外处理key event,需要遵守原始事件中的NumLock状态
404+
// 确保输出数字时在dde-shell的wayland客户端中接收到的也是数字。
405+
auto eventHandler = QWaylandCompositorPrivate::get(compositor)->eventHandler.get();
406+
if (eventHandler == QWindowSystemInterfacePrivate::eventHandler) {
407+
QWindowSystemInterfacePrivate::removeWindowSystemEventhandler(eventHandler);
408+
}
409+
410+
// 只创建就行
411+
auto qtKey = new QtWayland::QtKeyExtensionGlobal(compositor);
412+
qtKey->setParent(compositor);
413+
auto qtTouch = new QtWayland::TouchExtensionGlobal(compositor);
414+
qtTouch->setParent(compositor);
391415
}
392416

393417
void PluginManager::initialize()

0 commit comments

Comments
 (0)