diff options
| -rw-r--r-- | sb.cpp | 38 |
1 files changed, 21 insertions, 17 deletions
@@ -15,6 +15,7 @@ #include <QtGui/QKeyEvent> #include <QProgressBar> #include <QtX11Extras/QX11Info> +#include <QtX11Extras/QtX11Extras> #include <X11/Xlib.h> #include <QShortcut> #include <QVBoxLayout> @@ -34,6 +35,24 @@ uint32_t parent_id = 0; #include "config.hpp" +QWebEngineView * web; +QMainWindow * view; +Display * dpy; + +class WindowCreateEventFilter : public QObject + { + public: + bool eventFilter(QObject *obj, QEvent *event) + { + if (obj->isWindowType() && event->type() == QEvent::Show) { + QWindow *win = (QWindow*)obj; + XReparentWindow(dpy, win->winId(), parent_id, win->position().x(), win->position().y()); + XFlush(dpy); + } + return false; + } +}; + bool is_valid_url(const std::string & url) { std::regex r(".*://.*\\..*"); std::smatch m; @@ -41,10 +60,6 @@ bool is_valid_url(const std::string & url) { return std::regex_match(url, m, r); } -QWebEngineView * web; -QMainWindow * view; -Display * dpy; - std::string read_from_dmenu() { std::string output; @@ -124,6 +139,7 @@ void help(char *arg0) { int main(int argc, char **argv) { QApplication app(argc, argv); + WindowCreateEventFilter evfilter; QWebEngineProfile profile; WebEnginePage page(&profile); QProgressBar progressbar; @@ -133,6 +149,7 @@ main(int argc, char **argv) { std::string url = getenv("WWW_HOME"); bool url_set_by_arg = false; + app.installEventFilter(&evfilter); view = new QMainWindow(); web = new QWebEngineView(); @@ -147,7 +164,6 @@ main(int argc, char **argv) { url_label.setMargin(5); url_label.setStyleSheet("QLabel { background: #1d2021; color: #ebdbb2 }"); - for (int i = 1; i < argc; ++i) { if (argv[i] == std::string("-e")) { if (++i == argc || (argv[i][0] < '0' || argv[i][0] > '9')) @@ -155,8 +171,6 @@ main(int argc, char **argv) { dpy = XOpenDisplay(NULL); parent_id = std::stoi(argv[i]); - XReparentWindow(dpy, view->winId(), parent_id, 0, 0); - XFlush(dpy); } else if (!url_set_by_arg) { url = argv[i]; @@ -180,16 +194,6 @@ main(int argc, char **argv) { view->setWindowTitle(title); }); - if (parent_id != 0) { - web->setContextMenuPolicy(Qt::CustomContextMenu); - web->connect(web, - &QWebEngineView::customContextMenuRequested, [&](){ - auto menu = web->page()->createStandardContextMenu(); - menu->popup(QCursor::pos()); - return menu; - }); - } - web->connect(web, &QWebEngineView::loadProgress, [&](int progress) { progressbar.show(); progressbar.setValue(progress); |