[gtk+] Emit monitors-changed signal when appropriate
- From: Kristian Rietveld <kristian src gnome org>
- To: svn-commits-list gnome org
- Cc:
- Subject: [gtk+] Emit monitors-changed signal when appropriate
- Date: Mon, 26 Oct 2009 09:05:03 +0000 (UTC)
commit 63e2f54516329cd54509e87e417905d73277eb9e
Author: Kristian Rietveld <kris gtk org>
Date: Sat Oct 24 12:25:29 2009 +0200
Emit monitors-changed signal when appropriate
gdk/quartz/gdkscreen-quartz.c | 25 ++++++++++++++++++++-----
gdk/quartz/gdkscreen-quartz.h | 2 ++
2 files changed, 22 insertions(+), 5 deletions(-)
---
diff --git a/gdk/quartz/gdkscreen-quartz.c b/gdk/quartz/gdkscreen-quartz.c
index 68ca377..ac22590 100644
--- a/gdk/quartz/gdkscreen-quartz.c
+++ b/gdk/quartz/gdkscreen-quartz.c
@@ -60,6 +60,8 @@ _gdk_screen_quartz_init (GdkScreenQuartz *screen_quartz)
CGDisplayRegisterReconfigurationCallback (display_reconfiguration_callback,
screen);
+
+ screen_quartz->emit_monitors_changed = FALSE;
}
static void
@@ -187,6 +189,12 @@ process_display_reconfiguration (GdkScreenQuartz *screen)
if (width != gdk_screen_get_width (GDK_SCREEN (screen))
|| height != gdk_screen_get_height (GDK_SCREEN (screen)))
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
@@ -211,18 +219,25 @@ display_reconfiguration_callback (CGDirectDisplayID display,
if (flags & kCGDisplayBeginConfigurationFlag)
{
/* Ignore the begin configuration signal. */
-
- /* FIXME: We can most probably use this flag to properly
- * emit monitors-changed.
- */
return;
}
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
* yet, so we delay our refresh into an idle handler.
*/
-
if (!screen->screen_changed_id)
screen->screen_changed_id = gdk_threads_add_idle (screen_changed_idle,
screen);
diff --git a/gdk/quartz/gdkscreen-quartz.h b/gdk/quartz/gdkscreen-quartz.h
index a67401d..370e876 100644
--- a/gdk/quartz/gdkscreen-quartz.h
+++ b/gdk/quartz/gdkscreen-quartz.h
@@ -47,6 +47,8 @@ struct _GdkScreenQuartz
GdkRectangle *screen_rects;
guint screen_changed_id;
+
+ guint emit_monitors_changed : 1;
};
struct _GdkScreenQuartzClass
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]