Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 9d1d39d

Browse files
committed
[API] Implement Window.toggleKioskMode() and Window.toggleFullscreen().
Also add properties isFullscreen and isKioskMode for Window. Fix nwjs#125
1 parent ccd132a commit 9d1d39d

10 files changed

Lines changed: 74 additions & 2 deletions

src/api/window/window.cc

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -64,10 +64,14 @@ void Window::Call(const std::string& method,
6464
shell_->window()->SetFullscreen(true);
6565
} else if (method == "LeaveFullscreen") {
6666
shell_->window()->SetFullscreen(false);
67+
} else if (method == "ToggleFullscreen") {
68+
shell_->window()->SetFullscreen(!shell_->window()->IsFullscreen());
6769
} else if (method == "EnterKioskMode") {
6870
shell_->window()->SetKiosk(true);
6971
} else if (method == "LeaveKioskMode") {
7072
shell_->window()->SetKiosk(false);
73+
} else if (method == "ToggleKioskMode") {
74+
shell_->window()->SetKiosk(!shell_->window()->IsFullscreen());
7175
} else if (method == "ShowDevTools") {
7276
shell_->ShowDevTools();
7377
} else if (method == "SetMaximumSize") {
@@ -97,7 +101,20 @@ void Window::Call(const std::string& method,
97101
if (arguments.GetInteger(0, &id))
98102
shell_->window()->SetMenu(dispatcher_host()->GetObject<Menu>(id));
99103
} else {
100-
NOTREACHED() << "Invalid call to Clipboard method:" << method
104+
NOTREACHED() << "Invalid call to Window method:" << method
105+
<< " arguments:" << arguments;
106+
}
107+
}
108+
109+
void Window::CallSync(const std::string& method,
110+
const base::ListValue& arguments,
111+
base::ListValue* result) {
112+
if (method == "IsFullscreen") {
113+
result->AppendBoolean(shell_->window()->IsFullscreen());
114+
} else if (method == "IsKioskMode") {
115+
result->AppendBoolean(shell_->window()->IsKiosk());
116+
} else {
117+
NOTREACHED() << "Invalid call to Window method:" << method
101118
<< " arguments:" << arguments;
102119
}
103120
}

src/api/window/window.h

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,9 @@ class Window : public Base {
3939

4040
virtual void Call(const std::string& method,
4141
const base::ListValue& arguments) OVERRIDE;
42-
42+
virtual void CallSync(const std::string& method,
43+
const base::ListValue& arguments,
44+
base::ListValue* result) OVERRIDE;
4345
private:
4446
content::Shell* shell_;
4547

src/api/window/window.js

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -78,6 +78,16 @@ Window.prototype.__defineGetter__('menu', function() {
7878
return this.getHiddenValue('menu');
7979
});
8080

81+
Window.prototype.__defineGetter__('isFullscreen', function() {
82+
var result = nw.callObjectMethodSync(this, 'IsFullscreen', []);
83+
return Boolean(result[0]);
84+
});
85+
86+
Window.prototype.__defineGetter__('isKioskMode', function() {
87+
var result = nw.callObjectMethodSync(this, 'IsKioskMode', []);
88+
return Boolean(result[0]);
89+
});
90+
8191
Window.prototype.moveTo = function(x, y) {
8292
window.moveTo(x, y);
8393
}
@@ -144,6 +154,10 @@ Window.prototype.leaveFullscreen = function() {
144154
nw.callObjectMethod(this, 'LeaveFullscreen', []);
145155
}
146156

157+
Window.prototype.toggleFullscreen = function() {
158+
nw.callObjectMethod(this, 'ToggleFullscreen', []);
159+
}
160+
147161
Window.prototype.enterKioskMode = function() {
148162
nw.callObjectMethod(this, 'EnterKioskMode', []);
149163
}
@@ -152,6 +166,10 @@ Window.prototype.leaveKioskMode = function() {
152166
nw.callObjectMethod(this, 'LeaveKioskMode', []);
153167
}
154168

169+
Window.prototype.toggleKioskMode = function() {
170+
nw.callObjectMethod(this, 'ToggleKioskMode', []);
171+
}
172+
155173
Window.prototype.showDevTools = function() {
156174
nw.callObjectMethod(this, 'ShowDevTools', []);
157175
}

src/browser/native_window.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,7 @@ class NativeWindow {
7272
virtual void Minimize() = 0;
7373
virtual void Restore() = 0;
7474
virtual void SetFullscreen(bool fullscreen) = 0;
75+
virtual bool IsFullscreen() = 0;
7576
virtual void SetMinimumSize(int width, int height) = 0;
7677
virtual void SetMaximumSize(int width, int height) = 0;
7778
virtual void SetResizable(bool resizable) = 0;
@@ -80,6 +81,7 @@ class NativeWindow {
8081
virtual void SetTitle(const std::string& title) = 0;
8182
virtual void FlashFrame(bool flash) = 0;
8283
virtual void SetKiosk(bool kiosk) = 0;
84+
virtual bool IsKiosk() = 0;
8385
virtual void SetMenu(api::Menu* menu) = 0;
8486

8587
// Toolbar related controls.

src/browser/native_window_gtk.cc

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -180,6 +180,10 @@ void NativeWindowGtk::SetFullscreen(bool fullscreen) {
180180
gtk_window_unfullscreen(window_);
181181
}
182182

183+
bool NativeWindowGtk::IsFullscreen() {
184+
return content_thinks_its_fullscreen_;
185+
}
186+
183187
void NativeWindowGtk::SetMinimumSize(int width, int height) {
184188
GdkGeometry geometry = { 0 };
185189
geometry.min_width = width;
@@ -233,6 +237,10 @@ void NativeWindowGtk::SetKiosk(bool kiosk) {
233237
SetFullscreen(kiosk);
234238
}
235239

240+
bool NativeWindowGtk::IsKiosk() {
241+
return IsFullscreen();
242+
}
243+
236244
void NativeWindowGtk::SetMenu(api::Menu* menu) {
237245
gtk_box_pack_start(GTK_BOX(vbox_), menu->menu_, FALSE, FALSE, 0);
238246
gtk_box_reorder_child(GTK_BOX(vbox_), menu->menu_, 0);

src/browser/native_window_gtk.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,7 @@ class NativeWindowGtk : public NativeWindow {
4646
virtual void Minimize() OVERRIDE;
4747
virtual void Restore() OVERRIDE;
4848
virtual void SetFullscreen(bool fullscreen) OVERRIDE;
49+
virtual bool IsFullscreen() OVERRIDE;
4950
virtual void SetMinimumSize(int width, int height) OVERRIDE;
5051
virtual void SetMaximumSize(int width, int height) OVERRIDE;
5152
virtual void SetResizable(bool resizable) OVERRIDE;
@@ -54,6 +55,7 @@ class NativeWindowGtk : public NativeWindow {
5455
virtual void SetTitle(const std::string& title) OVERRIDE;
5556
virtual void FlashFrame(bool flash) OVERRIDE;
5657
virtual void SetKiosk(bool kiosk) OVERRIDE;
58+
virtual bool IsKiosk() OVERRIDE;
5759
virtual void SetMenu(api::Menu* menu) OVERRIDE;
5860
virtual void SetToolbarButtonEnabled(TOOLBAR_BUTTON button,
5961
bool enabled) OVERRIDE;

src/browser/native_window_mac.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,7 @@ class NativeWindowCocoa : public NativeWindow {
5050
virtual void Minimize() OVERRIDE;
5151
virtual void Restore() OVERRIDE;
5252
virtual void SetFullscreen(bool fullscreen) OVERRIDE;
53+
virtual bool IsFullscreen() OVERRIDE;
5354
virtual void SetMinimumSize(int width, int height) OVERRIDE;
5455
virtual void SetMaximumSize(int width, int height) OVERRIDE;
5556
virtual void SetResizable(bool resizable) OVERRIDE;
@@ -58,6 +59,7 @@ class NativeWindowCocoa : public NativeWindow {
5859
virtual void SetTitle(const std::string& title) OVERRIDE;
5960
virtual void FlashFrame(bool flash) OVERRIDE;
6061
virtual void SetKiosk(bool kiosk) OVERRIDE;
62+
virtual bool IsKiosk() OVERRIDE;
6163
virtual void SetMenu(api::Menu* menu) OVERRIDE;
6264
virtual void SetToolbarButtonEnabled(TOOLBAR_BUTTON button,
6365
bool enabled) OVERRIDE;
@@ -100,6 +102,7 @@ class NativeWindowCocoa : public NativeWindow {
100102
scoped_nsobject<ShellToolbarDelegate> toolbar_delegate_;
101103

102104
bool is_fullscreen_;
105+
bool is_kiosk_;
103106
NSRect restored_bounds_;
104107

105108
NSInteger attention_request_id_; // identifier from requestUserAttention

src/browser/native_window_mac.mm

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -411,6 +411,10 @@ - (NSRect)contentRectForFrameRect:(NSRect)frameRect {
411411
SetNonLionFullscreen(fullscreen);
412412
}
413413

414+
bool NativeWindowCocoa::IsFullscreen() {
415+
return is_fullscreen_;
416+
}
417+
414418
void NativeWindowCocoa::SetNonLionFullscreen(bool fullscreen) {
415419
if (fullscreen == is_fullscreen_)
416420
return;
@@ -520,13 +524,19 @@ - (NSRect)contentRectForFrameRect:(NSRect)frameRect {
520524
NSApplicationPresentationDisableSessionTermination +
521525
NSApplicationPresentationDisableHideApplication;
522526
[NSApp setPresentationOptions:options];
527+
is_kiosk_ = ture;
523528
SetNonLionFullscreen(true);
524529
} else {
525530
[NSApp setPresentationOptions:[NSApp currentSystemPresentationOptions]];
531+
is_kiosk_ = false;
526532
SetNonLionFullscreen(false);
527533
}
528534
}
529535

536+
bool NativeWindowCocoa::IsKiosk() {
537+
return is_kiosk_;
538+
}
539+
530540
void NativeWindowCocoa::SetMenu(api::Menu* menu) {
531541
StandardMenusMac standard_menus(shell_->GetPackage()->GetName());
532542
[NSApp setMainMenu:menu->menu_];

src/browser/native_window_win.cc

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -312,6 +312,10 @@ void NativeWindowWin::SetFullscreen(bool fullscreen) {
312312
shell()->SendEvent("leave-fullscreen");
313313
}
314314

315+
bool NativeWindowWin::IsFullscreen() {
316+
return is_fullscreen_;
317+
}
318+
315319
void NativeWindowWin::SetMinimumSize(int width, int height) {
316320
minimum_size_.set_width(width);
317321
minimum_size_.set_height(height);
@@ -353,6 +357,10 @@ void NativeWindowWin::SetKiosk(bool kiosk) {
353357
SetFullscreen(kiosk);
354358
}
355359

360+
bool NativeWindowWin::IsKiosk() {
361+
return IsFullscreen();
362+
}
363+
356364
void NativeWindowWin::SetMenu(api::Menu* menu) {
357365
window_->set_has_menu_bar(true);
358366
menu_ = menu;

src/browser/native_window_win.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,7 @@ class NativeWindowWin : public NativeWindow,
6060
virtual void Minimize() OVERRIDE;
6161
virtual void Restore() OVERRIDE;
6262
virtual void SetFullscreen(bool fullscreen) OVERRIDE;
63+
virtual bool IsFullscreen() OVERRIDE;
6364
virtual void SetMinimumSize(int width, int height) OVERRIDE;
6465
virtual void SetMaximumSize(int width, int height) OVERRIDE;
6566
virtual void SetResizable(bool resizable) OVERRIDE;
@@ -68,6 +69,7 @@ class NativeWindowWin : public NativeWindow,
6869
virtual void SetTitle(const std::string& title) OVERRIDE;
6970
virtual void FlashFrame(bool flash) OVERRIDE;
7071
virtual void SetKiosk(bool kiosk) OVERRIDE;
72+
virtual bool IsKiosk() OVERRIDE;
7173
virtual void SetMenu(api::Menu* menu) OVERRIDE;
7274
virtual void SetToolbarButtonEnabled(TOOLBAR_BUTTON button,
7375
bool enabled) OVERRIDE;

0 commit comments

Comments
 (0)