summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChristoph Ruegge <cruegge@users.noreply.github.com>2016-05-25 22:21:12 +0200
committerMichael Stapelberg <stapelberg@users.noreply.github.com>2016-05-25 22:21:12 +0200
commit463d38fed634ef569dfd524a7ab7bc19ae659b00 (patch)
tree6a1f47a80f4835a262128874cd8419d88a0060e3
parent402254b5752fcf6a8197b92f558cb0c35289fa74 (diff)
Add support for `xss-lock --transfer-sleep-lock' (#75)
Add support for `xss-lock --transfer-sleep-lock'
-rw-r--r--i3lock.c18
1 files changed, 18 insertions, 0 deletions
diff --git a/i3lock.c b/i3lock.c
index 928953b..524463f 100644
--- a/i3lock.c
+++ b/i3lock.c
@@ -628,6 +628,22 @@ static void xcb_prepare_cb(EV_P_ ev_prepare *w, int revents) {
}
/*
+ * Try closing logind sleep lock fd passed over from xss-lock, in case we're
+ * being run from there.
+ *
+ */
+static void maybe_close_sleep_lock_fd(void) {
+ const char *sleep_lock_fd = getenv("XSS_SLEEP_LOCK_FD");
+ char *endptr;
+ if (sleep_lock_fd && *sleep_lock_fd != 0) {
+ long int fd = strtol(sleep_lock_fd, &endptr, 10);
+ if (*endptr == 0) {
+ close(fd);
+ }
+ }
+}
+
+/*
* Instead of polling the X connection socket we leave this to
* xcb_poll_for_event() which knows better than we can ever know.
*
@@ -661,6 +677,7 @@ static void xcb_check_cb(EV_P_ ev_check *w, int revents) {
break;
case XCB_MAP_NOTIFY:
+ maybe_close_sleep_lock_fd();
if (!dont_fork) {
/* After the first MapNotify, we never fork again. We don’t
* expect to get another MapNotify, but better be sure… */
@@ -956,6 +973,7 @@ int main(int argc, char *argv[]) {
if (pid == 0) {
/* Child */
close(xcb_get_file_descriptor(conn));
+ maybe_close_sleep_lock_fd();
raise_loop(win);
exit(EXIT_SUCCESS);
}