diff options
| author | Po Lu | 2022-03-06 07:13:07 +0000 |
|---|---|---|
| committer | Po Lu | 2022-03-06 07:13:22 +0000 |
| commit | 0adb2d507cdf386f2cc8b4fb6c5bfc953fec42e8 (patch) | |
| tree | 17ec977e2c9422fbb228df72b8efd9182e668759 | |
| parent | 200627c255c4bf3f050f7f75fb3e4e100fe97bfa (diff) | |
| download | emacs-0adb2d507cdf386f2cc8b4fb6c5bfc953fec42e8.tar.gz emacs-0adb2d507cdf386f2cc8b4fb6c5bfc953fec42e8.zip | |
Implement frame cascading on Haiku
* haikufns.c (haiku_create_frame): Cascade frame position with
the focused frame if position is not user or programmer
specified.
| -rw-r--r-- | src/haikufns.c | 12 |
1 files changed, 11 insertions, 1 deletions
diff --git a/src/haikufns.c b/src/haikufns.c index 545edb27ae0..24e4613e3ee 100644 --- a/src/haikufns.c +++ b/src/haikufns.c | |||
| @@ -565,7 +565,7 @@ unwind_popup (void) | |||
| 565 | static Lisp_Object | 565 | static Lisp_Object |
| 566 | haiku_create_frame (Lisp_Object parms) | 566 | haiku_create_frame (Lisp_Object parms) |
| 567 | { | 567 | { |
| 568 | struct frame *f; | 568 | struct frame *f, *cascade_target; |
| 569 | Lisp_Object frame, tem; | 569 | Lisp_Object frame, tem; |
| 570 | Lisp_Object name; | 570 | Lisp_Object name; |
| 571 | bool minibuffer_only = false; | 571 | bool minibuffer_only = false; |
| @@ -575,6 +575,13 @@ haiku_create_frame (Lisp_Object parms) | |||
| 575 | struct haiku_display_info *dpyinfo = NULL; | 575 | struct haiku_display_info *dpyinfo = NULL; |
| 576 | struct kboard *kb; | 576 | struct kboard *kb; |
| 577 | 577 | ||
| 578 | if (x_display_list->focused_frame) | ||
| 579 | cascade_target = x_display_list->focused_frame; | ||
| 580 | else if (x_display_list->focus_event_frame) | ||
| 581 | cascade_target = x_display_list->focus_event_frame; | ||
| 582 | else | ||
| 583 | cascade_target = NULL; | ||
| 584 | |||
| 578 | parms = Fcopy_alist (parms); | 585 | parms = Fcopy_alist (parms); |
| 579 | 586 | ||
| 580 | Vx_resource_name = Vinvocation_name; | 587 | Vx_resource_name = Vinvocation_name; |
| @@ -888,6 +895,9 @@ haiku_create_frame (Lisp_Object parms) | |||
| 888 | block_input (); | 895 | block_input (); |
| 889 | if (window_prompting & (USPosition | PPosition)) | 896 | if (window_prompting & (USPosition | PPosition)) |
| 890 | haiku_set_offset (f, f->left_pos, f->top_pos, 1); | 897 | haiku_set_offset (f, f->left_pos, f->top_pos, 1); |
| 898 | else if (cascade_target) | ||
| 899 | haiku_set_offset (f, cascade_target->left_pos + 15, | ||
| 900 | cascade_target->top_pos + 15, 1); | ||
| 891 | else | 901 | else |
| 892 | BWindow_center_on_screen (FRAME_HAIKU_WINDOW (f)); | 902 | BWindow_center_on_screen (FRAME_HAIKU_WINDOW (f)); |
| 893 | unblock_input (); | 903 | unblock_input (); |