[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Emacs-diffs] emacs/src nsterm.m
From: |
Adrian Robert |
Subject: |
[Emacs-diffs] emacs/src nsterm.m |
Date: |
Fri, 18 Sep 2009 21:25:14 +0000 |
CVSROOT: /sources/emacs
Module name: emacs
Changes by: Adrian Robert <arobert> 09/09/18 21:25:14
Modified files:
src : nsterm.m
Log message:
* nsterm.m (EmacsView-windowShouldZoom:): Set frame left_pos, top_pos
and
don't update the NSWindow itself.
(EmacsView-windowWillUseStandardFrame:defaultFrame:): Improve
state detection and store user rect ourselves. (Bug #3581)
CVSWeb URLs:
http://cvs.savannah.gnu.org/viewcvs/emacs/src/nsterm.m?cvsroot=emacs&r1=1.86&r2=1.87
Patches:
Index: nsterm.m
===================================================================
RCS file: /sources/emacs/emacs/src/nsterm.m,v
retrieving revision 1.86
retrieving revision 1.87
diff -u -b -r1.86 -r1.87
--- nsterm.m 18 Sep 2009 15:12:15 -0000 1.86
+++ nsterm.m 18 Sep 2009 21:25:13 -0000 1.87
@@ -1089,6 +1089,7 @@
if (xoff < 100)
f->left_pos = 100; /* don't overlap menu */
#endif
+
if (view != nil && (screen = [[view window] screen]))
[[view window] setFrameTopLeftPoint:
NSMakePoint (SCREENMAXBOUND (f->left_pos),
@@ -5191,7 +5192,6 @@
NSWindow *win = [self window];
NSRect r = [win frame];
NSScreen *screen = [win screen];
- NSRect sr = [screen frame];
NSTRACE (windowDidMove);
@@ -5199,21 +5199,24 @@
return;
if (screen != nil)
{
- emacsframe->left_pos = r.origin.x; /* - sr.origin.x; */
- emacsframe->top_pos = sr.size.height -
- (r.origin.y + r.size.height); /* + sr.origin.y; */
+ emacsframe->left_pos = r.origin.x;
+ emacsframe->top_pos =
+ [screen frame].size.height - (r.origin.y + r.size.height);
}
}
-#ifdef NS_IMPL_COCOA
-/* if we don't do this manually, the window will resize but not move */
+
+/* Called AFTER method below, but before our windowWillResize call there leads
+ to windowDidResize -> x_set_window_size. Update emacs' notion of frame
+ location so set_window_size moves the frame. */
- (BOOL)windowShouldZoom: (NSWindow *)sender toFrame: (NSRect)newFrame
{
NSTRACE (windowShouldZoom);
- [[self window] setFrame: newFrame display: NO];
+ emacsframe->left_pos = (int)newFrame.origin.x;
+ emacsframe->top_pos = [[sender screen] frame].size.height
+ - (newFrame.origin.y+newFrame.size.height);
return YES;
}
-#endif
/* Override to do something slightly nonstandard, but nice. First click on
@@ -5223,16 +5226,27 @@
defaultFrame:(NSRect)defaultFrame
{
NSRect result = [sender frame];
+ static NSRect ns_userRect = { 0, 0, 0, 0 };
+
NSTRACE (windowWillUseStandardFrame);
- if (result.size.height == defaultFrame.size.height) {
- result = defaultFrame;
- } else {
+ if (abs (defaultFrame.size.height - result.size.height)
+ > FRAME_LINE_HEIGHT (emacsframe))
+ {
+ /* first click */
+ ns_userRect = result;
result.size.height = defaultFrame.size.height;
result.origin.y = defaultFrame.origin.y;
}
+ else
+ {
+ if (abs (defaultFrame.size.width - result.size.width)
+ > FRAME_COLUMN_WIDTH (emacsframe))
+ result = defaultFrame; /* second click */
+ else
+ result = ns_userRect.size.height ? ns_userRect : result; /* restore */
+ }
- /* A windowWillResize does not get generated on Tiger or Leopard. */
[self windowWillResize: sender toSize: result.size];
return result;
}