@@ -65,6 +65,10 @@ class PluginManager : public QWaylandCompositorExtensionTemplate<PluginManager>,
6565
6666 Q_INVOKABLE void updateDockOverflowState (int state);
6767 Q_INVOKABLE void setPopupMinHeight (int height);
68+
69+ // Called from QML when moveXEmbedWindowRequested is handled
70+ // result: true = success, false = error
71+ Q_INVOKABLE void notifyXEmbedWindowMoveResult (bool result);
6872
6973 uint32_t dockPosition () const ;
7074 void setDockPosition (uint32_t dockPosition);
@@ -92,6 +96,9 @@ class PluginManager : public QWaylandCompositorExtensionTemplate<PluginManager>,
9296 void messageRequest (PluginSurface *, const QString &msg);
9397 void dockSizeChanged ();
9498 void requestShutdown (const QString &type);
99+ // Signal emitted when XEmbed window move is requested
100+ // Parameters: wid (window ID), pluginId, itemKey, dx (relative x offset), dy (relative y offset)
101+ void moveXEmbedWindowRequested (uint32_t wid, const QString &pluginId, const QString &itemKey, double dx, double dy);
95102
96103private Q_SLOTS :
97104 void onFontChanged ();
@@ -103,6 +110,7 @@ private Q_SLOTS:
103110 virtual void plugin_manager_v1_request_message (Resource *resource, const QString &plugin_id, const QString &item_key, const QString &msg) override ;
104111 virtual void plugin_manager_v1_create_popup_at (Resource *resource, const QString &plugin_id, const QString &item_key, int32_t type, int32_t x, int32_t y, struct ::wl_resource *surface, uint32_t id) override ;
105112 virtual void plugin_manager_v1_create_plugin (Resource *resource, const QString &plugin_id, const QString &item_key, const QString &display_name, int32_t plugin_flags, int32_t type, int32_t size_policy, struct ::wl_resource *surface, uint32_t id) override ;
113+ virtual void plugin_manager_v1_move_xembed_window (Resource *resource, uint32_t xembed_winid, const QString &plugin_id, const QString &item_key, uint32_t callback) override ;
106114
107115private:
108116 static QJsonObject getRootObj (const QString &jsonStr);
@@ -113,6 +121,7 @@ private Q_SLOTS:
113121 QString popupMinHeightMsg () const ;
114122 using PluginSurfaceCallback = std::function<void (Resource *)>;
115123 void foreachPluginSurface (PluginSurfaceCallback callback);
124+ PluginSurface* findPluginSurface (const QString &pluginId, const QString &itemKey) const ;
116125
117126private:
118127 QList<PluginSurface*> m_pluginSurfaces;
@@ -121,6 +130,10 @@ private Q_SLOTS:
121130 uint32_t m_dockColorTheme = 0 ;
122131 QSize m_dockSize;
123132 int m_popupMinHeight = 0 ;
133+
134+ // For pending XEmbed callback response
135+ uint32_t m_pendingXEmbedCallback = 0 ;
136+ struct ::wl_client *m_pendingXEmbedClient = nullptr ;
124137};
125138
126139class PluginSurface : public QWaylandShellSurfaceTemplate <PluginSurface>, public QtWaylandServer::plugin
@@ -173,6 +186,9 @@ class PluginSurface : public QWaylandShellSurfaceTemplate<PluginSurface>, public
173186 Q_INVOKABLE void updatePluginGeometry (const QRect &geometry);
174187 Q_INVOKABLE void setGlobalPos (const QPoint &pos);
175188
189+ // Position relative to the dock window, set from QML via updatePluginGeometry
190+ QPoint itemPosition () const ;
191+
176192 int margins () const ;
177193 void setMargins (int newMargins);
178194
@@ -211,6 +227,7 @@ class PluginSurface : public QWaylandShellSurfaceTemplate<PluginSurface>, public
211227 int m_margins = 0 ;
212228 int m_height;
213229 int m_width;
230+ QPoint m_itemPosition; // Position relative to dock window, for XEmbed window positioning
214231};
215232
216233class PluginPopup : public QWaylandShellSurfaceTemplate <PluginPopup>, public QtWaylandServer::plugin_popup
0 commit comments