]> git.eshelyaron.com Git - emacs.git/commitdiff
Implement frame cascading on Haiku
authorPo Lu <luangruo@yahoo.com>
Sun, 6 Mar 2022 07:13:07 +0000 (07:13 +0000)
committerPo Lu <luangruo@yahoo.com>
Sun, 6 Mar 2022 07:13:22 +0000 (07:13 +0000)
* haikufns.c (haiku_create_frame): Cascade frame position with
the focused frame if position is not user or programmer
specified.

src/haikufns.c

index 545edb27ae017fc7fe0a76d33393cf888c908ed7..24e4613e3eee8b4615702c128a1e9fe006af9b38 100644 (file)
@@ -565,7 +565,7 @@ unwind_popup (void)
 static Lisp_Object
 haiku_create_frame (Lisp_Object parms)
 {
-  struct frame *f;
+  struct frame *f, *cascade_target;
   Lisp_Object frame, tem;
   Lisp_Object name;
   bool minibuffer_only = false;
@@ -575,6 +575,13 @@ haiku_create_frame (Lisp_Object parms)
   struct haiku_display_info *dpyinfo = NULL;
   struct kboard *kb;
 
+  if (x_display_list->focused_frame)
+    cascade_target = x_display_list->focused_frame;
+  else if (x_display_list->focus_event_frame)
+    cascade_target = x_display_list->focus_event_frame;
+  else
+    cascade_target = NULL;
+
   parms = Fcopy_alist (parms);
 
   Vx_resource_name = Vinvocation_name;
@@ -888,6 +895,9 @@ haiku_create_frame (Lisp_Object parms)
   block_input ();
   if (window_prompting & (USPosition | PPosition))
     haiku_set_offset (f, f->left_pos, f->top_pos, 1);
+  else if (cascade_target)
+    haiku_set_offset (f, cascade_target->left_pos + 15,
+                     cascade_target->top_pos + 15, 1);
   else
     BWindow_center_on_screen (FRAME_HAIKU_WINDOW (f));
   unblock_input ();