aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNathan Reiner <nathan@nathanreiner.xyz>2023-01-28 11:34:35 +0100
committerNathan Reiner <nathan@nathanreiner.xyz>2023-01-28 11:34:35 +0100
commit6cc6821950730146c4723e0bf5c9e3ac796e2b45 (patch)
tree8ef6e0cf02c6b2a5bddf459d249009d3c6f65c69
parent5750e5ecf2bb51a9d48f30a320a7824310d009cd (diff)
fix window attach xembed for popups and menus
-rw-r--r--sb.cpp38
1 files changed, 21 insertions, 17 deletions
diff --git a/sb.cpp b/sb.cpp
index 163876a..0c5bdd7 100644
--- a/sb.cpp
+++ b/sb.cpp
@@ -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);