|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
From 1c7830cc105bfe217abe6f304f4785bbeab209f6 Mon Sep 17 00:00:00 2001
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
From: David Herrmann <dh.herrmann@gmail.com>
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
Date: Mon, 29 Sep 2014 14:59:01 +0200
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
Subject: [PATCH] terminal: add sysview_seat_switch_to()
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
Add helper to perform session switches on a specific seat whenever we
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
retrieve a VT-switch keyboard event.
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
---
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
src/libsystemd-terminal/sysview-internal.h | 1 +
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
src/libsystemd-terminal/sysview.c | 28 ++++++++++++++++++++++++++++
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
src/libsystemd-terminal/sysview.h | 1 +
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
3 files changed, 30 insertions(+)
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
diff --git a/src/libsystemd-terminal/sysview-internal.h b/src/libsystemd-terminal/sysview-internal.h
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
index d9f7fe3301..39ff933eaa 100644
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
--- a/src/libsystemd-terminal/sysview-internal.h
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
+++ b/src/libsystemd-terminal/sysview-internal.h
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
@@ -88,6 +88,7 @@ DEFINE_TRIVIAL_CLEANUP_FUNC(sysview_session*, sysview_session_free);
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
struct sysview_seat {
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
sysview_context *context;
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
char *name;
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
+ char *path;
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
Hashmap *session_map;
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
Hashmap *device_map;
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
diff --git a/src/libsystemd-terminal/sysview.c b/src/libsystemd-terminal/sysview.c
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
index cd776f62d8..919fadf6fe 100644
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
--- a/src/libsystemd-terminal/sysview.c
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
+++ b/src/libsystemd-terminal/sysview.c
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
@@ -391,6 +391,10 @@ int sysview_seat_new(sysview_seat **out, sysview_context *c, const char *name) {
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
if (!seat->name)
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
return -ENOMEM;
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
+ r = sd_bus_path_encode("/org/freedesktop/login1/seat", seat->name, &seat->path);
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
+ if (r < 0)
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
+ return r;
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
+
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
seat->session_map = hashmap_new(&string_hash_ops);
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
if (!seat->session_map)
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
return -ENOMEM;
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
@@ -422,6 +426,7 @@ sysview_seat *sysview_seat_free(sysview_seat *seat) {
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
hashmap_free(seat->device_map);
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
hashmap_free(seat->session_map);
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
+ free(seat->path);
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
free(seat->name);
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
free(seat);
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
@@ -434,6 +439,29 @@ const char *sysview_seat_get_name(sysview_seat *seat) {
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
return seat->name;
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
}
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
+int sysview_seat_switch_to(sysview_seat *seat, uint32_t nr) {
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
+ _cleanup_bus_message_unref_ sd_bus_message *m = NULL;
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
+ int r;
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
+
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
+ assert_return(seat, -EINVAL);
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
+ assert_return(seat->context->sysbus, -EINVAL);
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
+
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
+ r = sd_bus_message_new_method_call(seat->context->sysbus,
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
+ &m,
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
+ "org.freedesktop.login1",
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
+ seat->path,
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
+ "org.freedesktop.login1.Seat",
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
+ "SwitchTo");
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
+ if (r < 0)
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
+ return r;
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
+
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
+ r = sd_bus_message_append(m, "u", nr);
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
+ if (r < 0)
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
+ return r;
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
+
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
+ return sd_bus_send(seat->context->sysbus, m, NULL);
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
+}
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
+
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
/*
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
* Contexts
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
*/
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
diff --git a/src/libsystemd-terminal/sysview.h b/src/libsystemd-terminal/sysview.h
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
index f691e492d5..31b800f698 100644
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
--- a/src/libsystemd-terminal/sysview.h
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
+++ b/src/libsystemd-terminal/sysview.h
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
@@ -137,6 +137,7 @@ void sysview_session_release_control(sysview_session *session);
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
*/
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
const char *sysview_seat_get_name(sysview_seat *seat);
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
+int sysview_seat_switch_to(sysview_seat *seat, uint32_t nr);
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
/*
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
* Contexts
|