Emit monitors-changed signal when appropriate
This commit is contained in:
parent
12dc617dc2
commit
63e2f54516
@ -60,6 +60,8 @@ _gdk_screen_quartz_init (GdkScreenQuartz *screen_quartz)
|
|||||||
|
|
||||||
CGDisplayRegisterReconfigurationCallback (display_reconfiguration_callback,
|
CGDisplayRegisterReconfigurationCallback (display_reconfiguration_callback,
|
||||||
screen);
|
screen);
|
||||||
|
|
||||||
|
screen_quartz->emit_monitors_changed = FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
@ -187,6 +189,12 @@ process_display_reconfiguration (GdkScreenQuartz *screen)
|
|||||||
if (width != gdk_screen_get_width (GDK_SCREEN (screen))
|
if (width != gdk_screen_get_width (GDK_SCREEN (screen))
|
||||||
|| height != gdk_screen_get_height (GDK_SCREEN (screen)))
|
|| height != gdk_screen_get_height (GDK_SCREEN (screen)))
|
||||||
g_signal_emit_by_name (_gdk_screen, "size-changed");
|
g_signal_emit_by_name (_gdk_screen, "size-changed");
|
||||||
|
|
||||||
|
if (screen->emit_monitors_changed)
|
||||||
|
{
|
||||||
|
g_signal_emit_by_name (screen, "monitors-changed");
|
||||||
|
screen->emit_monitors_changed = FALSE;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static gboolean
|
static gboolean
|
||||||
@ -211,18 +219,25 @@ display_reconfiguration_callback (CGDirectDisplayID display,
|
|||||||
if (flags & kCGDisplayBeginConfigurationFlag)
|
if (flags & kCGDisplayBeginConfigurationFlag)
|
||||||
{
|
{
|
||||||
/* Ignore the begin configuration signal. */
|
/* Ignore the begin configuration signal. */
|
||||||
|
|
||||||
/* FIXME: We can most probably use this flag to properly
|
|
||||||
* emit monitors-changed.
|
|
||||||
*/
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
/* We save information about the changes, so we can emit
|
||||||
|
* ::monitors-changed when appropriate. This signal must be
|
||||||
|
* emitted when the number, size of position of one of the
|
||||||
|
* monitors changes.
|
||||||
|
*/
|
||||||
|
if (flags & kCGDisplayMovedFlag
|
||||||
|
|| flags & kCGDisplayAddFlag
|
||||||
|
|| flags & kCGDisplayRemoveFlag
|
||||||
|
|| flags & kCGDisplayEnabledFlag
|
||||||
|
|| flags & kCGDisplayDisabledFlag)
|
||||||
|
screen->emit_monitors_changed = TRUE;
|
||||||
|
|
||||||
/* At this point Cocoa does not know about the new screen data
|
/* At this point Cocoa does not know about the new screen data
|
||||||
* yet, so we delay our refresh into an idle handler.
|
* yet, so we delay our refresh into an idle handler.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
if (!screen->screen_changed_id)
|
if (!screen->screen_changed_id)
|
||||||
screen->screen_changed_id = gdk_threads_add_idle (screen_changed_idle,
|
screen->screen_changed_id = gdk_threads_add_idle (screen_changed_idle,
|
||||||
screen);
|
screen);
|
||||||
|
@ -47,6 +47,8 @@ struct _GdkScreenQuartz
|
|||||||
GdkRectangle *screen_rects;
|
GdkRectangle *screen_rects;
|
||||||
|
|
||||||
guint screen_changed_id;
|
guint screen_changed_id;
|
||||||
|
|
||||||
|
guint emit_monitors_changed : 1;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct _GdkScreenQuartzClass
|
struct _GdkScreenQuartzClass
|
||||||
|
Loading…
Reference in New Issue
Block a user