diff options
Diffstat (limited to 'src/haikufns.c')
-rw-r--r-- | src/haikufns.c | 22 |
1 files changed, 20 insertions, 2 deletions
diff --git a/src/haikufns.c b/src/haikufns.c index 69f502fb016..7bb613af6e2 100644 --- a/src/haikufns.c +++ b/src/haikufns.c @@ -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,10 +895,18 @@ 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 (); + FRAME_OUTPUT_DATA (f)->configury_done = true; + + if (f->want_fullscreen != FULLSCREEN_NONE) + FRAME_TERMINAL (f)->fullscreen_hook (f); + /* Make sure windows on this frame appear in calls to next-window and similar functions. */ Vwindow_list = Qnil; @@ -1374,7 +1389,7 @@ haiku_set_background_color (struct frame *f, Lisp_Object arg, Lisp_Object oldval { struct face *defface; - BView_draw_lock (FRAME_HAIKU_VIEW (f)); + BView_draw_lock (FRAME_HAIKU_VIEW (f), false, 0, 0, 0, 0); BView_SetViewColor (FRAME_HAIKU_VIEW (f), color.pixel); BView_draw_unlock (FRAME_HAIKU_VIEW (f)); @@ -2201,6 +2216,9 @@ DEFUN ("x-show-tip", Fx_show_tip, Sx_show_tip, 1, 6, 0, block_input (); void *wnd = FRAME_HAIKU_WINDOW (tip_f); BWindow_resize (wnd, width, height); + /* The window decorator might cause the actual width and height to + be larger than WIDTH and HEIGHT, so use the actual sizes. */ + BWindow_dimensions (wnd, &width, &height); BView_resize_to (FRAME_HAIKU_VIEW (tip_f), width, height); BView_set_view_cursor (FRAME_HAIKU_VIEW (tip_f), FRAME_OUTPUT_DATA (f)->current_cursor); |