Merge pull request #2422 from atom/resizable-resize
mac: Disable resizing window when changing style mask
This commit is contained in:
commit
b8d364f11e
2 changed files with 36 additions and 2 deletions
|
@ -20,7 +20,26 @@
|
||||||
#include "content/public/browser/render_widget_host_view.h"
|
#include "content/public/browser/render_widget_host_view.h"
|
||||||
#include "native_mate/dictionary.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)
|
@interface NSView (PrivateMethods)
|
||||||
- (CGFloat)roundedCornerRadius;
|
- (CGFloat)roundedCornerRadius;
|
||||||
|
@ -214,8 +233,12 @@ static const CGFloat kAtomWindowCornerRadius = 4.0;
|
||||||
enable_larger_than_screen_ = enable;
|
enable_larger_than_screen_ = enable;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Enable the window to be larger than screen.
|
|
||||||
- (NSRect)constrainFrameRect:(NSRect)frameRect toScreen:(NSScreen*)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_)
|
if (enable_larger_than_screen_)
|
||||||
return frameRect;
|
return frameRect;
|
||||||
else
|
else
|
||||||
|
@ -561,6 +584,9 @@ gfx::Size NativeWindowMac::GetMaximumSize() {
|
||||||
}
|
}
|
||||||
|
|
||||||
void NativeWindowMac::SetResizable(bool resizable) {
|
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) {
|
if (resizable) {
|
||||||
[[window_ standardWindowButton:NSWindowZoomButton] setEnabled:YES];
|
[[window_ standardWindowButton:NSWindowZoomButton] setEnabled:YES];
|
||||||
[window_ setStyleMask:[window_ styleMask] | NSResizableWindowMask];
|
[window_ setStyleMask:[window_ styleMask] | NSResizableWindowMask];
|
||||||
|
|
|
@ -129,6 +129,14 @@ describe 'browser-window module', ->
|
||||||
it 'returns the window with id', ->
|
it 'returns the window with id', ->
|
||||||
assert.equal w.id, BrowserWindow.fromId(w.id).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', ->
|
describe '"use-content-size" option', ->
|
||||||
it 'make window created with content size when used', ->
|
it 'make window created with content size when used', ->
|
||||||
w.destroy()
|
w.destroy()
|
||||||
|
|
Loading…
Reference in a new issue