Implement monitor change hooks on NS
This hasn't been tested with anything more complicated than removing an emulated monitor. * nsterm.m (ns_displays_reconfigured): New function. (ns_term_init): Register display reconfiguration callbacks.
This commit is contained in:
parent
5a290eb7d3
commit
b7b14e9203
1 changed files with 34 additions and 0 deletions
34
src/nsterm.m
34
src/nsterm.m
|
@ -5213,6 +5213,31 @@ static Lisp_Object ns_string_to_lispmod (const char *s)
|
|||
ns_default_font_parameter
|
||||
};
|
||||
|
||||
#ifdef NS_IMPL_COCOA
|
||||
static void
|
||||
ns_displays_reconfigured (CGDirectDisplayID display,
|
||||
CGDisplayChangeSummaryFlags flags,
|
||||
void *user_info)
|
||||
{
|
||||
struct input_event ie;
|
||||
union buffered_input_event *ev;
|
||||
|
||||
EVENT_INIT (ie);
|
||||
|
||||
ev = (kbd_store_ptr == kbd_buffer
|
||||
? kbd_buffer + KBD_BUFFER_SIZE - 1
|
||||
: kbd_store_ptr - 1);
|
||||
|
||||
if (kbd_store_ptr != kbd_fetch_ptr
|
||||
&& ev->ie.kind == MONITORS_CHANGED_EVENT)
|
||||
return;
|
||||
|
||||
ie.kind = MONITORS_CHANGED_EVENT;
|
||||
XSETTERMINAL (ie.arg, x_display_list->terminal);
|
||||
|
||||
kbd_buffer_store_event (&ie);
|
||||
}
|
||||
#endif
|
||||
|
||||
static void
|
||||
ns_delete_display (struct ns_display_info *dpyinfo)
|
||||
|
@ -5568,6 +5593,15 @@ Needs to be here because ns_initialize_display_info () uses AppKit classes.
|
|||
catch_child_signal ();
|
||||
#endif
|
||||
|
||||
#ifdef NS_IMPL_COCOA
|
||||
/* Begin listening for display reconfiguration, so we can run the
|
||||
appropriate hooks. FIXME: is this called when the resolution of
|
||||
a monitor changes? */
|
||||
|
||||
CGDisplayRegisterReconfigurationCallback (ns_displays_reconfigured,
|
||||
NULL);
|
||||
#endif
|
||||
|
||||
NSTRACE_MSG ("ns_term_init done");
|
||||
|
||||
unblock_input ();
|
||||
|
|
Loading…
Add table
Reference in a new issue