added generating a notification for dialogs

This commit is contained in:
Roman Pudashkin 2021-11-29 15:38:44 +02:00
parent d4e0b2c2df
commit 2816ce63ff
3 changed files with 26 additions and 2 deletions

View file

@ -47,14 +47,16 @@ Item {
function onFireOpen(data) {
var page = data.data()
console.log("try open uri: " + data.value("uri") + ", page: " + JSON.stringify(page))
var uri = data.value("uri")
console.log("try open uri: " + uri + ", page: " + JSON.stringify(page))
if (!(page && (page.type === ContainerType.PrimaryPage || page.type === ContainerType.QmlDialog))) {
data.setValue("ret", {errcode: 101 }) // ResolveFailed
return;
}
if (page.type === ContainerType.PrimaryPage) {
root.requestedDockPage(data.value("uri"), page.params)
root.requestedDockPage(uri, page.params)
root.provider.onOpen(page.type, {})
data.setValue("ret", {errcode: 0 })
return;
@ -71,6 +73,10 @@ Item {
return
}
dialogObj.object.opened.connect(function() {
root.provider.notifyAboutUriOpened(uri)
})
if (Boolean(data.value("sync")) && data.value("sync") === true) {
dialogObj.object.exec()
} else {

View file

@ -46,6 +46,8 @@ InteractiveProvider::InteractiveProvider()
raiseWindowInStack(widget);
}
});
qApp->installEventFilter(this);
}
void InteractiveProvider::raiseWindowInStack(QObject* newActiveWindow)
@ -69,6 +71,20 @@ void InteractiveProvider::raiseWindowInStack(QObject* newActiveWindow)
}
}
bool InteractiveProvider::eventFilter(QObject* watched, QEvent* event)
{
if (event->type() != QEvent::Show || m_stack.empty()) {
return QObject::eventFilter(watched, event);
}
const ObjectInfo& info = m_stack.top();
if (watched && info.window == watched) {
m_opened.send(info.uriQuery.uri());
}
return QObject::eventFilter(watched, event);
}
RetVal<Val> InteractiveProvider::question(const std::string& title, const IInteractive::Text& text,
const IInteractive::ButtonDatas& buttons, int defBtn,
const IInteractive::Options& options)

View file

@ -102,6 +102,8 @@ signals:
void fireOpenStandardDialog(QmlLaunchData* data);
private:
bool eventFilter(QObject* watched, QEvent* event);
struct OpenData
{
bool sync = false;