#endif
x_set_parent_frame,
0, /* x_set_skip_taskbar */
- 0, /* x_set_no_focus_on_map */
+ x_set_no_focus_on_map,
x_set_no_accept_focus,
x_set_z_group, /* x_set_z_group */
0, /* x_set_override_redirect */
store_frame_param (f, Qparent_frame, parent_frame);
x_default_parameter (f, parms, Qz_group, Qnil, NULL, NULL, RES_TYPE_SYMBOL);
+ x_default_parameter (f, parms, Qno_focus_on_map, Qnil,
+ NULL, NULL, RES_TYPE_BOOLEAN);
x_default_parameter (f, parms, Qno_accept_focus, Qnil,
NULL, NULL, RES_TYPE_BOOLEAN);
Lisp_Object old_value);
extern void x_set_parent_frame (struct frame *f, Lisp_Object new_value,
Lisp_Object old_value);
+extern void x_set_no_focus_on_map (struct frame *f, Lisp_Object new_value,
+ Lisp_Object old_value);
extern void x_set_no_accept_focus (struct frame *f, Lisp_Object new_value,
Lisp_Object old_value);
extern void x_set_z_group (struct frame *f, Lisp_Object new_value,
static void
-ns_raise_frame (struct frame *f)
+ns_raise_frame (struct frame *f, BOOL make_key)
/* --------------------------------------------------------------------------
- Bring window to foreground and make it active
+ Bring window to foreground and if make_key is YES, give it focus.
-------------------------------------------------------------------------- */
{
NSView *view;
view = FRAME_NS_VIEW (f);
block_input ();
if (FRAME_VISIBLE_P (f))
- [[view window] makeKeyAndOrderFront: NSApp];
+ {
+ if (make_key)
+ [[view window] makeKeyAndOrderFront: NSApp];
+ else
+ [[view window] orderFront: NSApp];
+ }
unblock_input ();
}
NSTRACE ("ns_frame_raise_lower");
if (raise)
- ns_raise_frame (f);
+ ns_raise_frame (f, YES);
else
ns_lower_frame (f);
}
EmacsView *view = (EmacsView *)FRAME_NS_VIEW (f);
SET_FRAME_VISIBLE (f, 1);
- ns_raise_frame (f);
+ ns_raise_frame (f, ! FRAME_NO_FOCUS_ON_MAP (f));
/* Making a new frame from a fullscreen frame will make the new frame
fullscreen also. So skip handleFS as this will print an error. */
}
}
+void
+x_set_no_focus_on_map (struct frame *f, Lisp_Object new_value, Lisp_Object old_value)
+/* Set frame F's `no-focus-on-map' parameter which, if non-nil, means
+ * that F's window-system window does not want to receive input focus
+ * when it is mapped. (A frame's window is mapped when the frame is
+ * displayed for the first time and when the frame changes its state
+ * from `iconified' or `invisible' to `visible'.)
+ *
+ * Some window managers may not honor this parameter. */
+{
+ NSTRACE ("x_set_no_focus_on_map");
+
+ if (!EQ (new_value, old_value))
+ {
+ FRAME_NO_FOCUS_ON_MAP (f) = !NILP (new_value);
+ }
+}
+
void
x_set_no_accept_focus (struct frame *f, Lisp_Object new_value, Lisp_Object old_value)
/* Set frame F's `no-accept-focus' parameter which, if non-nil, hints