aboutsummaryrefslogtreecommitdiff
path: root/sb.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'sb.cpp')
-rw-r--r--sb.cpp94
1 files changed, 69 insertions, 25 deletions
diff --git a/sb.cpp b/sb.cpp
index 617c3b7..01993c8 100644
--- a/sb.cpp
+++ b/sb.cpp
@@ -2,6 +2,7 @@
#include <regex>
#include <QtWidgets/QApplication>
+#include <QAction>
#include <QtGui/QWindow>
#include <QtWidgets/QMainWindow>
#include <QtWebEngineWidgets/QWebEngineView>
@@ -12,10 +13,13 @@
#include <QtWidgets/QLabel>
#include <QtWidgets/QMenu>
#include <QtGui/QKeyEvent>
+#include <QProgressBar>
#include <QtX11Extras/QX11Info>
#include <X11/Xlib.h>
+#include <QShortcut>
+#include <QVBoxLayout>
+
-#include "config.hpp"
bool is_valid_url(const std::string & url);
void open_url(const std::string & url);
@@ -23,9 +27,12 @@ void search();
void page_scroll(int scroll);
void goto_end(bool end);
void get_window_id();
-class Main;
+void history_move(bool back);
+void reload();
uint32_t parent_id = 0;
+#include "config.hpp"
+
bool is_valid_url(const std::string & url) {
std::regex r(".*://.*\\..*");
std::smatch m;
@@ -34,31 +41,33 @@ bool is_valid_url(const std::string & url) {
}
QWebEngineView * web;
-Main * view;
+QMainWindow * view;
Display * dpy;
-class Main : public QMainWindow {
- protected:
- void keyPressEvent(QKeyEvent * event) {
- if (event->text() == "o")
- search();
- else if (event->text() == "j")
- page_scroll(scroll_speed);
- else if (event->text() == "k")
- page_scroll(-scroll_speed);
- else if (event->text() == "H")
- web->back();
- else if (event->text() == "L")
- web->forward();
- else if (event->text() == "r")
- web->reload();
- else if (event->text() == "g")
- goto_end(false);
- else if (event->text() == "G")
- goto_end(true);
+class WebEnginePage: public QWebEnginePage {
+Q_OBJECT
+public:
+ WebEnginePage(QWebEngineProfile *profile) : QWebEnginePage(profile) {};
+ virtual ~WebEnginePage() = default;
+
+protected:
+ QWebEnginePage *createWindow(WebWindowType){
+ WebEnginePage *page = new WebEnginePage(this->profile());
+ connect(page, &QWebEnginePage::urlChanged, this, &WebEnginePage::onUrlChanged);
+ return page;
+ }
+
+private:
+ void onUrlChanged(const QUrl & url){
+ if(WebEnginePage *page = qobject_cast<WebEnginePage *>(sender())){
+ setUrl(url);
+ page->deleteLater();
}
+ }
};
+#include "webengine.hpp"
+
std::string read_from_dmenu() {
std::string output;
@@ -114,6 +123,17 @@ void goto_end(bool end) {
web->page()->runJavaScript(QString::fromStdString(js));
}
+void history_move(bool back) {
+ if (back)
+ web->back();
+ else
+ web->forward();
+}
+
+void reload() {
+ web->reload();
+}
+
void help(char *arg0) {
std::cout << arg0 << '\n';
std::cout << "-e [xid] - embed in other X window\n";
@@ -130,12 +150,20 @@ main(int argc, char **argv) {
QApplication app(size, arg.data());
QWebEngineProfile profile;
- QWebEnginePage page(&profile);
+ WebEnginePage page(&profile);
+ QProgressBar progressbar;
+ QWidget *main = new QWidget;
+ QVBoxLayout layout(main);
- view = new Main();
+ view = new QMainWindow();
web = new QWebEngineView();
web->setPage(&page);
web->load(QUrl(getenv("WWW_HOME")));
+ progressbar.setMaximum(100);
+ progressbar.setMinimum(0);
+ progressbar.setTextVisible(false);
+ progressbar.setMaximumHeight(10);
+ progressbar.setStyleSheet("QProgressBar::chunk { background: #b16286; border-radius: 0px }");
if (argc == 3 && argv[1] == std::string("-e")) {
dpy = XOpenDisplay(NULL);
@@ -147,8 +175,12 @@ main(int argc, char **argv) {
}
+ layout.setContentsMargins(0, 0, 0, 0);
+ layout.setSpacing(0);
+ layout.addWidget(web);
+ layout.addWidget(&progressbar);
+ view->setCentralWidget(main);
view->show();
- view->setCentralWidget(web);
web->connect(web, &QWebEngineView::titleChanged, [&](const QString & title) {
view->setWindowTitle(title);
@@ -164,5 +196,17 @@ main(int argc, char **argv) {
});
}
+ web->connect(web, &QWebEngineView::loadProgress, [&](int progress) {
+ progressbar.show();
+ progressbar.setValue(progress);
+ });
+
+
+ web->connect(web, &QWebEngineView::loadFinished, [&](bool ok) {
+ progressbar.hide();
+ });
+
+ register_shortcuts(view);
+
return app.exec();
}