diff --git a/src/cpp/include/nodegui/QtGui/QWindow/qwindow_wrap.h b/src/cpp/include/nodegui/QtGui/QWindow/qwindow_wrap.h index 08d0e63c1..5f35e3ad5 100644 --- a/src/cpp/include/nodegui/QtGui/QWindow/qwindow_wrap.h +++ b/src/cpp/include/nodegui/QtGui/QWindow/qwindow_wrap.h @@ -9,7 +9,8 @@ #include "QtCore/QObject/qobject_macro.h" class DLL_EXPORT QWindowWrap : public Napi::ObjectWrap, - public EventWidget { + public EventWidget, + public QObject { QOBJECT_WRAPPED_METHODS_DECLARATION_WITH_EVENT_SOURCE(this) // Note: We don't use EVENTWIDGET_IMPLEMENTATIONS() here because this class // doesn't handle any QEvents. @@ -34,6 +35,7 @@ class DLL_EXPORT QWindowWrap : public Napi::ObjectWrap, static Napi::Object init(Napi::Env env, Napi::Object exports); QWindowWrap(const Napi::CallbackInfo& info); + ~QWindowWrap(); QWindow* getInternalInstance(); virtual void connectSignalsToEventEmitter(); @@ -46,4 +48,9 @@ class DLL_EXPORT QWindowWrap : public Napi::ObjectWrap, Napi::Value showNormal(const Napi::CallbackInfo& info); Napi::Value startSystemMove(const Napi::CallbackInfo& info); Napi::Value startSystemResize(const Napi::CallbackInfo& info); + Napi::Value setWindowState(const Napi::CallbackInfo& info); + Napi::Value windowState(const Napi::CallbackInfo& info); + + protected: + bool eventFilter(QObject* watched, QEvent* event) override; }; diff --git a/src/cpp/lib/QtGui/QWindow/qwindow_wrap.cpp b/src/cpp/lib/QtGui/QWindow/qwindow_wrap.cpp index a42b35c2b..1f230d367 100644 --- a/src/cpp/lib/QtGui/QWindow/qwindow_wrap.cpp +++ b/src/cpp/lib/QtGui/QWindow/qwindow_wrap.cpp @@ -18,6 +18,8 @@ Napi::Object QWindowWrap::init(Napi::Env env, Napi::Object exports) { InstanceMethod("showNormal", &QWindowWrap::showNormal), InstanceMethod("startSystemMove", &QWindowWrap::startSystemMove), InstanceMethod("startSystemResize", &QWindowWrap::startSystemResize), + InstanceMethod("setWindowState", &QWindowWrap::setWindowState), + InstanceMethod("windowState", &QWindowWrap::windowState), QOBJECT_WRAPPED_METHODS_EXPORT_DEFINE(QWindowWrap)}); constructor = Napi::Persistent(func); exports.Set(CLASSNAME, func); @@ -38,6 +40,12 @@ QWindowWrap::QWindowWrap(const Napi::CallbackInfo& info) this->rawData = extrautils::configureQObject(this->getInternalInstance()); } +QWindowWrap::~QWindowWrap() { + if (!this->instance.isNull()) { + this->instance->removeEventFilter(this); + } +} + void QWindowWrap::connectSignalsToEventEmitter() { QOBJECT_SIGNALS_ON_TARGET(this->instance.data()); @@ -50,6 +58,12 @@ void QWindowWrap::connectSignalsToEventEmitter() { this->emitOnNode.Call( {Napi::String::New(env, "screenChanged"), instance}); }); + + this->instance->installEventFilter(this); +} + +bool QWindowWrap::eventFilter(QObject* watched, QEvent* event) { + return this->EventWidget::event(event); } Napi::Value QWindowWrap::screen(const Napi::CallbackInfo& info) { @@ -98,3 +112,17 @@ Napi::Value QWindowWrap::startSystemResize(const Napi::CallbackInfo& info) { bool result = this->instance->startSystemResize(static_cast(edge)); return Napi::Boolean::New(env, result); } + +Napi::Value QWindowWrap::setWindowState(const Napi::CallbackInfo& info) { + Napi::Env env = info.Env(); + Napi::Number state = info[0].As(); + this->instance->setWindowState( + static_cast(state.Int32Value())); + return env.Null(); +} + +Napi::Value QWindowWrap::windowState(const Napi::CallbackInfo& info) { + Napi::Env env = info.Env(); + int state = static_cast(this->instance->windowState()); + return Napi::Value::From(env, state); +} diff --git a/src/lib/QtGui/QWindow.ts b/src/lib/QtGui/QWindow.ts index a6baff12f..d0274bd73 100644 --- a/src/lib/QtGui/QWindow.ts +++ b/src/lib/QtGui/QWindow.ts @@ -3,7 +3,7 @@ import { checkIfNativeElement, registerNativeWrapFunction } from '../utils/helpe import { NodeObject, QObjectSignals } from '../QtCore/QObject'; import { QScreen } from './QScreen'; import { wrapperCache } from '../core/WrapperCache'; -import { Edge } from '../QtEnums'; +import { Edge, WindowState } from '../QtEnums'; export class QWindow extends NodeObject { native: NativeElement; @@ -42,7 +42,9 @@ export class QWindow extends NodeObject { // TODO: void setX(int arg) // TODO: void setY(int arg) // TODO: void show() - + setWindowState(state: WindowState): void { + return this.native.setWindowState(state); + } showFullScreen(): void { this.native.showFullScreen(); } @@ -61,6 +63,9 @@ export class QWindow extends NodeObject { startSystemResize(edges: Edge): boolean { return this.native.startSystemResize(edges); } + windowState(): WindowState { + return this.native.windowState(); + } } export interface QWindowSignals extends QObjectSignals { diff --git a/src/lib/QtWidgets/QWidget.ts b/src/lib/QtWidgets/QWidget.ts index 2a8fb1055..8b7aea320 100644 --- a/src/lib/QtWidgets/QWidget.ts +++ b/src/lib/QtWidgets/QWidget.ts @@ -565,7 +565,7 @@ export abstract class NodeWidget extends YogaWid windowRole(): string { return this.native.windowRole(); } - windowState(): number { + windowState(): WindowState { return this.native.windowState(); } windowTitle(): string {