summaryrefslogtreecommitdiff
path: root/src/haikufns.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/haikufns.c')
-rw-r--r--src/haikufns.c22
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);