Merge pull request #2422 from atom/resizable-resize

mac: Disable resizing window when changing style mask
This commit is contained in:
Cheng Zhao 2015-08-05 14:44:31 +08:00
commit b8d364f11e
2 changed files with 36 additions and 2 deletions

View file

@ -20,7 +20,26 @@
#include "content/public/browser/render_widget_host_view.h"
#include "native_mate/dictionary.h"
static const CGFloat kAtomWindowCornerRadius = 4.0;
namespace {
// The radius of rounded corner.
const CGFloat kAtomWindowCornerRadius = 4.0;
// Prevents window from resizing during the scope.
class ScopedDisableResize {
public:
ScopedDisableResize() { disable_resize_ = true; }
~ScopedDisableResize() { disable_resize_ = false; }
static bool IsResizeDisabled() { return disable_resize_; }
private:
static bool disable_resize_;
};
bool ScopedDisableResize::disable_resize_ = false;
} // namespace
@interface NSView (PrivateMethods)
- (CGFloat)roundedCornerRadius;
@ -214,8 +233,12 @@ static const CGFloat kAtomWindowCornerRadius = 4.0;
enable_larger_than_screen_ = enable;
}
// Enable the window to be larger than screen.
- (NSRect)constrainFrameRect:(NSRect)frameRect toScreen:(NSScreen*)screen {
// Resizing is disabled.
if (ScopedDisableResize::IsResizeDisabled())
return [self frame];
// Enable the window to be larger than screen.
if (enable_larger_than_screen_)
return frameRect;
else
@ -561,6 +584,9 @@ gfx::Size NativeWindowMac::GetMaximumSize() {
}
void NativeWindowMac::SetResizable(bool resizable) {
// Change styleMask for frameless causes the window to change size, so we have
// to explicitly disables that.
ScopedDisableResize disable_resize;
if (resizable) {
[[window_ standardWindowButton:NSWindowZoomButton] setEnabled:YES];
[window_ setStyleMask:[window_ styleMask] | NSResizableWindowMask];

View file

@ -129,6 +129,14 @@ describe 'browser-window module', ->
it 'returns the window with id', ->
assert.equal w.id, BrowserWindow.fromId(w.id).id
describe 'BrowserWindow.setResizable(resizable)', ->
it 'does not change window size for frameless window', ->
w.destroy()
w = new BrowserWindow(show: true, frame: false)
s = w.getSize()
w.setResizable not w.isResizable()
assert.deepEqual s, w.getSize()
describe '"use-content-size" option', ->
it 'make window created with content size when used', ->
w.destroy()