diff --git a/panels/dock/pluginmanagerextension.cpp b/panels/dock/pluginmanagerextension.cpp index a4e207612..2f3d8e262 100644 --- a/panels/dock/pluginmanagerextension.cpp +++ b/panels/dock/pluginmanagerextension.cpp @@ -14,6 +14,7 @@ #include #include #include +#include #include #include @@ -431,6 +432,9 @@ void PluginManager::initialize() #endif init(compositor->display(), 1); + + // 设置鼠标焦点监听器 + setupMouseFocusListener(); } void PluginManager::updateDockOverflowState(int state) @@ -685,3 +689,26 @@ QString PluginManager::popupMinHeightMsg() const return toJson(obj); } + +void PluginManager::setupMouseFocusListener() +{ + QWaylandCompositor *compositor = static_cast(extensionContainer()); + if (!compositor) + return; + + QWaylandSeat *seat = compositor->defaultSeat(); + if (!seat) + return; + + QObject::connect(seat, &QWaylandSeat::mouseFocusChanged, this, + [seat](QWaylandView *newFocus, QWaylandView *oldFocus) { + Q_UNUSED(oldFocus); + if(!newFocus) + return; + + if (auto surface = newFocus->surface()) { + qDebug()<<"setKeyboardFocus"; + seat->setKeyboardFocus(surface); + } + }); +} diff --git a/panels/dock/pluginmanagerextension_p.h b/panels/dock/pluginmanagerextension_p.h index ccf3f0bc1..18ba7ad0d 100644 --- a/panels/dock/pluginmanagerextension_p.h +++ b/panels/dock/pluginmanagerextension_p.h @@ -9,6 +9,8 @@ #include #include #include +#include + #include #include "qwayland-server-fractional-scale-v1.h" @@ -76,6 +78,9 @@ class PluginManager : public QWaylandCompositorExtensionTemplate, void removePluginSurface(PluginSurface *plugin); + //处理鼠标焦点给到相应插件 + void setupMouseFocusListener(); + Q_SIGNALS: void pluginPopupCreated(PluginPopup*); void pluginCloseQuickPanelPopup();