diff --git a/repos/libports/include/qt5/qpluginwidget/qpluginwidget.h b/repos/libports/include/qt5/qpluginwidget/qpluginwidget.h index 54ea29add..629f95f6f 100644 --- a/repos/libports/include/qt5/qpluginwidget/qpluginwidget.h +++ b/repos/libports/include/qt5/qpluginwidget/qpluginwidget.h @@ -45,6 +45,7 @@ class PluginStarter : public QThread QByteArray _args; int _max_width; int _max_height; + Nitpicker::View_capability _parent_view; Loader::Connection *_pc; enum Plugin_loading_state _plugin_loading_state; @@ -60,7 +61,8 @@ class PluginStarter : public QThread public: PluginStarter(QUrl plugin_url, QString &args, - int max_width, int max_height); + int max_width, int max_height, + Nitpicker::View_capability parent_view); void run(); enum Plugin_loading_state plugin_loading_state() { return _plugin_loading_state; } @@ -82,6 +84,10 @@ class QPluginWidget : public QNitpickerViewWidget QString _plugin_loading_error_string; PluginStarter *_plugin_starter; + bool _plugin_starter_started; + + QUrl _plugin_url; + QString _plugin_args; int _max_width; int _max_height; @@ -95,6 +101,7 @@ class QPluginWidget : public QNitpickerViewWidget protected: virtual void paintEvent(QPaintEvent *event); + virtual void showEvent(QShowEvent *event); protected slots: void pluginStartFinished(); diff --git a/repos/libports/lib/mk/qt5_qpluginwidget.mk b/repos/libports/lib/mk/qt5_qpluginwidget.mk index 4185e93e6..c37fb0eea 100644 --- a/repos/libports/lib/mk/qt5_qpluginwidget.mk +++ b/repos/libports/lib/mk/qt5_qpluginwidget.mk @@ -7,4 +7,4 @@ HEADERS += qpluginwidget.h vpath %.h $(REP_DIR)/include/qt5/qpluginwidget vpath %.cpp $(REP_DIR)/src/lib/qt5/qpluginwidget -LIBS += qt5_gui qt5_widgets qt5_network qt5_qnitpickerviewwidget qt5_core libc zlib +LIBS += qt5_gui qt5_widgets qt5_network qt5_qnitpickerviewwidget qt5_core qt5_qpa_nitpicker libc qoost zlib diff --git a/repos/libports/src/lib/qt5/qpluginwidget/qpluginwidget.cpp b/repos/libports/src/lib/qt5/qpluginwidget/qpluginwidget.cpp index bb617f2ae..3071aec5a 100644 --- a/repos/libports/src/lib/qt5/qpluginwidget/qpluginwidget.cpp +++ b/repos/libports/src/lib/qt5/qpluginwidget/qpluginwidget.cpp @@ -14,9 +14,8 @@ #include #include -#if 0 -#include -#endif + +#include #include @@ -88,11 +87,13 @@ class Signal_wait_thread : public QThread PluginStarter::PluginStarter(QUrl plugin_url, QString &args, - int max_width, int max_height) + int max_width, int max_height, + Nitpicker::View_capability parent_view) : _plugin_url(plugin_url), _args(args.toLatin1()), _max_width(max_width), _max_height(max_height), + _parent_view(parent_view), _pc(0), _plugin_loading_state(LOADING), _qnam(0), @@ -191,6 +192,7 @@ void PluginStarter::_start_plugin(QString &file_name, QByteArray const &file_buf _pc->view_ready_sigh(sig_rec.manage(&sig_ctx)); _pc->constrain_geometry(_max_width, _max_height); + _pc->parent_view(_parent_view); _pc->start("init", "init"); Timed_semaphore view_ready_semaphore; @@ -289,6 +291,9 @@ QPluginWidget::QPluginWidget(QWidget *parent, QUrl plugin_url, QString &args, QNitpickerViewWidget(parent), _plugin_loading_state(LOADING), _plugin_starter(0), + _plugin_starter_started(false), + _plugin_url(plugin_url), + _plugin_args(args), _max_width(max_width), _max_height(max_height) { @@ -302,11 +307,6 @@ QPluginWidget::QPluginWidget(QWidget *parent, QUrl plugin_url, QString &args, _last->cleanup(); _last = this; } - - _plugin_starter = new PluginStarter(plugin_url, args, max_width, max_height); - _plugin_starter->moveToThread(_plugin_starter); - connect(_plugin_starter, SIGNAL(finished()), this, SLOT(pluginStartFinished())); - _plugin_starter->start(); } @@ -372,6 +372,29 @@ void QPluginWidget::paintEvent(QPaintEvent *event) } +void QPluginWidget::showEvent(QShowEvent *event) +{ + /* only now do we know the parent widget for sure */ + + if (!_plugin_starter_started) { + + QNitpickerPlatformWindow *platform_window = + dynamic_cast(window()->windowHandle()->handle()); + + _plugin_starter = new PluginStarter(_plugin_url, _plugin_args, + _max_width, _max_height, + platform_window->view_cap()); + _plugin_starter->moveToThread(_plugin_starter); + connect(_plugin_starter, SIGNAL(finished()), this, SLOT(pluginStartFinished())); + _plugin_starter->start(); + + _plugin_starter_started = true; + } + + QNitpickerViewWidget::showEvent(event); +} + + void QPluginWidget::pluginStartFinished() { _plugin_loading_state = _plugin_starter->plugin_loading_state();