[gnome-desktop] idle-monitor: Clarify code and comments about alarm rescheduling workaround
- From: Bastien Nocera <hadess src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-desktop] idle-monitor: Clarify code and comments about alarm rescheduling workaround
- Date: Thu, 14 Feb 2013 15:38:36 +0000 (UTC)
commit 626de2acb020e62a4276ef8acbe72cf940157d5a
Author: Jasper St. Pierre <jstpierre mecheye net>
Date: Thu Jan 17 23:52:57 2013 -0500
idle-monitor: Clarify code and comments about alarm rescheduling workaround
Segment the code out in its own function, point out that this is an Xorg
bug, and don't actually set any attributes -- just call XSyncChangeAlarm.
https://bugzilla.gnome.org/show_bug.cgi?id=688227
libgnome-desktop/gnome-idle-monitor.c | 18 ++++++++++++++----
1 files changed, 14 insertions(+), 4 deletions(-)
---
diff --git a/libgnome-desktop/gnome-idle-monitor.c b/libgnome-desktop/gnome-idle-monitor.c
index 844861f..053d290 100644
--- a/libgnome-desktop/gnome-idle-monitor.c
+++ b/libgnome-desktop/gnome-idle-monitor.c
@@ -120,6 +120,18 @@ _xsync_alarm_set (GnomeIdleMonitor *monitor,
return XSyncCreateAlarm (monitor->priv->display, flags, &attr);
}
+static void
+ensure_alarm_rescheduled (Display *dpy,
+ XSyncAlarm alarm)
+{
+ XSyncAlarmAttributes attr;
+
+ /* Some versions of Xorg have an issue where alarms aren't
+ * always rescheduled. Calling XSyncChangeAlarm, even
+ * without any attributes, will reschedule the alarm. */
+ XSyncChangeAlarm (dpy, alarm, 0, &attr);
+}
+
static GnomeIdleMonitorWatch *
find_watch_for_alarm (GnomeIdleMonitor *monitor,
XSyncAlarm alarm)
@@ -144,7 +156,6 @@ handle_alarm_notify_event (GnomeIdleMonitor *monitor,
g_signal_emit (monitor, signals[BECAME_ACTIVE], 0);
} else {
GnomeIdleMonitorWatch *watch;
- XSyncAlarmAttributes attr;
watch = find_watch_for_alarm (monitor, alarm_event->alarm);
if (watch == NULL)
@@ -158,9 +169,8 @@ handle_alarm_notify_event (GnomeIdleMonitor *monitor,
watch->user_data);
}
- /* Reset the alarm so it can be triggered again */
- attr.events = TRUE;
- XSyncChangeAlarm (watch->display, watch->xalarm, XSyncCAEvents, &attr);
+ ensure_alarm_rescheduled (monitor->priv->display,
+ watch->xalarm);
}
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]