summaryrefslogtreecommitdiffhomepage
path: root/app/lib
diff options
context:
space:
mode:
authorAndrej Mihajlov <and@mullvad.net>2018-08-07 13:00:02 +0200
committerAndrej Mihajlov <and@mullvad.net>2018-08-08 16:25:34 +0200
commit3e63b2509962201cd25861dc752b2a404f1b614d (patch)
tree0b0e7ca4b54a94a54c9f4750ada7dde95daff064 /app/lib
parent3e6a4de0a1682bbe51300f4bee4f84f2679a8c25 (diff)
downloadmullvadvpn-3e63b2509962201cd25861dc752b2a404f1b614d.tar.xz
mullvadvpn-3e63b2509962201cd25861dc752b2a404f1b614d.zip
Add WindowStateObserver
Diffstat (limited to 'app/lib')
-rw-r--r--app/lib/window-state-observer.js64
1 files changed, 64 insertions, 0 deletions
diff --git a/app/lib/window-state-observer.js b/app/lib/window-state-observer.js
new file mode 100644
index 0000000000..67252d8f6a
--- /dev/null
+++ b/app/lib/window-state-observer.js
@@ -0,0 +1,64 @@
+// @flow
+
+import { remote } from 'electron';
+
+type EventListener = () => void;
+
+// Tiny helper for detecting the window state.
+export default class WindowStateObserver {
+ _onShow: ?EventListener;
+ _onHide: ?EventListener;
+
+ get onShow() {
+ return this._onShow;
+ }
+
+ set onShow(listener: ?EventListener) {
+ const currentWindow = remote.getCurrentWindow();
+ const oldListener = this._onShow;
+ if (oldListener) {
+ currentWindow.removeListener('show', oldListener);
+ }
+
+ if (listener) {
+ currentWindow.addListener('show', listener);
+ }
+
+ this._onShow = listener;
+ }
+
+ get onHide() {
+ return this._onHide;
+ }
+
+ set onHide(listener: ?EventListener) {
+ const currentWindow = remote.getCurrentWindow();
+ const oldListener = this._onHide;
+ if (oldListener) {
+ currentWindow.removeListener('hide', oldListener);
+ }
+
+ if (listener) {
+ currentWindow.addListener('hide', listener);
+ }
+
+ this._onHide = listener;
+ }
+
+ constructor() {
+ // Because BrowserWindow persists between page reloads,
+ // it's important to release event handlers when that happens.
+ window.addEventListener('beforeunload', this._onBeforeUnload);
+ }
+
+ _onBeforeUnload = () => {
+ this.dispose();
+ };
+
+ dispose() {
+ this.onShow = null;
+ this.onHide = null;
+
+ window.removeEventListener('beforeunload', this._onBeforeUnload);
+ }
+}