This commit is contained in:
2026-03-05 10:59:06 +01:00
parent 99f30a6798
commit 3b53a945f9
11 changed files with 133 additions and 13 deletions

View File

@@ -10,6 +10,7 @@
#include <QJsonObject>
#include <QAbstractEventDispatcher>
#include "command.h"
#include <QFileDialog>
void Rktwebview_qt::processCommand(Command *cmd)
{
@@ -25,7 +26,7 @@ void Rktwebview_qt::processCommand(Command *cmd)
void *f = cmd->args[1].value<void *>();
event_cb_t js_event_cb = reinterpret_cast <event_cb_t>(f);
QWidget *p;
WebviewWindow *p;
if (_views.contains(parent)) {
p = _views[parent];
} else {
@@ -248,6 +249,31 @@ void Rktwebview_qt::processCommand(Command *cmd)
cmd->done = true;
}
break;
case COMMAND_CHOOSE_DIR: {
int wv = cmd->args[0].toInt();
QString title = cmd->args[1].toString();
QString base_dir = cmd->args[2].toString();
if (_views.contains(wv)) {
WebviewWindow *w = _views[wv];
QString dir = QFileDialog::getExistingDirectory(w, title, base_dir, QFileDialog::ShowDirsOnly | QFileDialog::DontResolveSymlinks);
if (dir == "") {
QJsonObject obj;
obj["state"] = "canceled";
obj["dir"] = base_dir;
cmd->result = QString::fromUtf8(QJsonDocument(obj).toJson(QJsonDocument::JsonFormat::Compact));
} else {
QJsonObject obj;
obj["state"] = "choosen";
obj["dir"] = dir;
cmd->result = QString::fromUtf8(QJsonDocument(obj).toJson(QJsonDocument::JsonFormat::Compact));
}
} else {
cmd->js_result_ok = false;
cmd->result = false;
}
cmd->done = true;
}
break;
default: {
cmd->result = false;
cmd->done = true;
@@ -433,6 +459,31 @@ window_state_t Rktwebview_qt::rktWindowState(rktwebview_t w)
return ws;
}
rkt_js_result_t *Rktwebview_qt::rktChooseDir(rktwebview_t w, const char *title, const char *base_dir)
{
Command c(COMMAND_CHOOSE_DIR);
c.args.push_back(w);
QString t(title);
c.args.push_back(t);
QString dir(base_dir);
c.args.push_back(dir);
postCommand(&c);
while(!c.done) { doEvents(); }
bool oke = c.js_result_ok;
rkt_js_result_t *r = static_cast<rkt_js_result_t *>(malloc(sizeof(rkt_js_result_t)));
r->result = c.js_result_ok ? result_t::oke : result_t::choose_dir_failed;
r->value = strdup(c.result.toString().toUtf8());
return r;
}
result_t Rktwebview_qt::rktWindowSetTitle(rktwebview_t wv, const char *title)
{
Command c(COMMAND_SET_TITLE);