diff --git a/src/nsterm.m b/src/nsterm.m index 7fbfcf8c6d4..67b02c7a54a 100644 --- a/src/nsterm.m +++ b/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 ();