Merge pull request #10280 from electron/fix-10280

Fix 'BrowserWindow module window states resizable state works for a frameless window'
This commit is contained in:
Cheng Zhao 2017-08-21 19:28:13 +09:00 committed by GitHub
commit dede3d6213
2 changed files with 15 additions and 4 deletions

View file

@ -304,11 +304,16 @@ NativeWindowViews::NativeWindowViews(
::SetWindowLong(GetAcceleratedWidget(), GWL_EXSTYLE, ex_style); ::SetWindowLong(GetAcceleratedWidget(), GWL_EXSTYLE, ex_style);
#endif #endif
// TODO(zcbenz): This was used to force using native frame on Windows 2003, we
// should check whether setting it in InitParams can work.
if (has_frame()) { if (has_frame()) {
// TODO(zcbenz): This was used to force using native frame on Windows 2003,
// we should check whether setting it in InitParams can work.
window_->set_frame_type(views::Widget::FrameType::FRAME_TYPE_FORCE_NATIVE); window_->set_frame_type(views::Widget::FrameType::FRAME_TYPE_FORCE_NATIVE);
window_->FrameTypeChanged(); window_->FrameTypeChanged();
#if defined(OS_WIN)
// thickFrame also works for normal window.
if (!thick_frame_)
FlipWindowStyle(GetAcceleratedWidget(), false, WS_THICKFRAME);
#endif
} }
gfx::Size size = bounds.size(); gfx::Size size = bounds.size();
@ -577,6 +582,12 @@ gfx::Size NativeWindowViews::GetContentSize() {
void NativeWindowViews::SetContentSizeConstraints( void NativeWindowViews::SetContentSizeConstraints(
const extensions::SizeConstraints& size_constraints) { const extensions::SizeConstraints& size_constraints) {
NativeWindow::SetContentSizeConstraints(size_constraints); NativeWindow::SetContentSizeConstraints(size_constraints);
#if defined(OS_WIN)
// Changing size constraints would force adding the WS_THICKFRAME style, so
// do nothing if thickFrame is false.
if (!thick_frame_)
return;
#endif
// widget_delegate() is only available after Init() is called, we make use of // widget_delegate() is only available after Init() is called, we make use of
// this to determine whether native widget has initialized. // this to determine whether native widget has initialized.
if (window_ && window_->widget_delegate()) if (window_ && window_->widget_delegate())
@ -589,7 +600,7 @@ void NativeWindowViews::SetContentSizeConstraints(
void NativeWindowViews::SetResizable(bool resizable) { void NativeWindowViews::SetResizable(bool resizable) {
#if defined(OS_WIN) #if defined(OS_WIN)
if (has_frame()) if (has_frame() && thick_frame_)
FlipWindowStyle(GetAcceleratedWidget(), resizable, WS_THICKFRAME); FlipWindowStyle(GetAcceleratedWidget(), resizable, WS_THICKFRAME);
#elif defined(USE_X11) #elif defined(USE_X11)
if (resizable != resizable_) { if (resizable != resizable_) {

View file

@ -1962,7 +1962,7 @@ describe('BrowserWindow module', function () {
assert.equal(w.isResizable(), true) assert.equal(w.isResizable(), true)
}) })
xit('works for a frameless window', () => { it('works for a frameless window', () => {
w.destroy() w.destroy()
w = new BrowserWindow({show: false, frame: false}) w = new BrowserWindow({show: false, frame: false})
assert.equal(w.isResizable(), true) assert.equal(w.isResizable(), true)