aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorPo Lu2022-03-06 10:43:25 +0800
committerPo Lu2022-03-06 10:43:25 +0800
commite09bbfc37d81d58af3412ae1b56dc2e620218653 (patch)
tree347ec2352781cc8d5ae2c0a9a00042c8035e8075 /src
parentdb2cb522e154ce97b7a780572d2cb99d82d291ca (diff)
downloademacs-e09bbfc37d81d58af3412ae1b56dc2e620218653.tar.gz
emacs-e09bbfc37d81d58af3412ae1b56dc2e620218653.zip
Implement "window cascading" on NS
* src/nsfns.m (Fx_create_frame): Cascade new frame position if size hint flags are not USPosition or PPosition.
Diffstat (limited to 'src')
-rw-r--r--src/nsfns.m22
1 files changed, 21 insertions, 1 deletions
diff --git a/src/nsfns.m b/src/nsfns.m
index 1900616b9de..6256bd220dd 100644
--- a/src/nsfns.m
+++ b/src/nsfns.m
@@ -1112,6 +1112,7 @@ DEFUN ("x-create-frame", Fx_create_frame, Sx_create_frame,
1112 Lisp_Object parent, parent_frame; 1112 Lisp_Object parent, parent_frame;
1113 struct kboard *kb; 1113 struct kboard *kb;
1114 static int desc_ctr = 1; 1114 static int desc_ctr = 1;
1115 NSWindow *main_window = [NSApp mainWindow];
1115 1116
1116 /* gui_display_get_arg modifies parms. */ 1117 /* gui_display_get_arg modifies parms. */
1117 parms = Fcopy_alist (parms); 1118 parms = Fcopy_alist (parms);
@@ -1483,8 +1484,27 @@ DEFUN ("x-create-frame", Fx_create_frame, Sx_create_frame,
1483 if (CONSP (XCAR (tem)) && !NILP (XCAR (XCAR (tem)))) 1484 if (CONSP (XCAR (tem)) && !NILP (XCAR (XCAR (tem))))
1484 fset_param_alist (f, Fcons (XCAR (tem), f->param_alist)); 1485 fset_param_alist (f, Fcons (XCAR (tem), f->param_alist));
1485 1486
1486 if (window_prompting & USPosition) 1487 /* This cascading behavior (which is the job of the window manager
1488 on X-based systems) is something NS applications are expected to
1489 implement themselves. At least one person tells me he used
1490 Carbon Emacs solely for this behavior. */
1491 if (window_prompting & (USPosition | PPosition) || FRAME_PARENT_FRAME (f))
1487 ns_set_offset (f, f->left_pos, f->top_pos, 1); 1492 ns_set_offset (f, f->left_pos, f->top_pos, 1);
1493 else
1494 {
1495 NSWindow *frame_window = [FRAME_NS_VIEW (f) window];
1496 NSPoint top_left;
1497
1498 if (main_window)
1499 {
1500 top_left = NSMakePoint (NSMinX ([main_window frame]),
1501 NSMaxY ([main_window frame]));
1502 top_left = [frame_window cascadeTopLeftFromPoint: top_left];
1503 [frame_window cascadeTopLeftFromPoint: top_left];
1504 }
1505 else
1506 [main_window center];
1507 }
1488 1508
1489 /* Make sure windows on this frame appear in calls to next-window 1509 /* Make sure windows on this frame appear in calls to next-window
1490 and similar functions. */ 1510 and similar functions. */