diff options
| author | Nathan Reiner <nathan@nathanreiner.xyz> | 2023-01-27 22:53:40 +0100 |
|---|---|---|
| committer | Nathan Reiner <nathan@nathanreiner.xyz> | 2023-01-27 22:53:40 +0100 |
| commit | 9b9aa83298b82ce2d29d7a89d6a1147a613c7c71 (patch) | |
| tree | f6e3365e167f50a25846f5499fe280fc64aabbf5 /webengine.hpp | |
| parent | d7e89fbed51291df145ac326646fa4cefa64a28c (diff) | |
make spawn new window when requested
Diffstat (limited to 'webengine.hpp')
| -rw-r--r-- | webengine.hpp | 23 |
1 files changed, 21 insertions, 2 deletions
diff --git a/webengine.hpp b/webengine.hpp index dc73d97..38bacf4 100644 --- a/webengine.hpp +++ b/webengine.hpp @@ -17,6 +17,8 @@ #error "(The moc has changed too much.)" #endif +#include <unistd.h> + class WebEnginePage: public QWebEnginePage { Q_OBJECT public: @@ -24,7 +26,7 @@ public: virtual ~WebEnginePage() = default; protected: - QWebEnginePage *createWindow(WebWindowType){ + QWebEnginePage *createWindow(WebWindowType type){ WebEnginePage *page = new WebEnginePage(this->profile()); connect(page, &QWebEnginePage::urlChanged, this, &WebEnginePage::onUrlChanged); return page; @@ -33,7 +35,24 @@ protected: private: void onUrlChanged(const QUrl & url){ if(WebEnginePage *page = qobject_cast<WebEnginePage *>(sender())){ - setUrl(url); + if (fork() == 0) { + std::string surl = url.toString().toStdString(); + std::string parent_id_str = std::to_string(parent_id); + const char *exec[5] = { 0 }; + exec[0] = "sb"; + exec[1] = surl.c_str(); + + if (parent_id != 0) { + exec[2] = "-e"; + exec[3] = parent_id_str.c_str(); + } + + fprintf(stderr, "spawn url: %s", exec[1]); + execvp((char*)exec[0], (char**)exec); + fprintf(stderr, "failed to open new sb instance\n"); + perror(" failed"); + exit(-1); + } page->deleteLater(); } } |