|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
From 965f7a3f9bf7afb85be62198fabc70ffa033d8b1 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: Sat, 20 Sep 2014 09:43:16 +0200
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
Subject: [PATCH] terminal: forward DEVICE_CHANGE events via sysview
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
Whe need to react to "change" events on devices, but we want to avoid
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
duplicating udev-monitors everywhere. Therefore, make sysview forward
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
change events to the sysview controllers, which can then properly react
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
to it.
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
---
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
src/libsystemd-terminal/sysview.c | 14 +++++++++++++-
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
src/libsystemd-terminal/sysview.h | 7 +++++++
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
2 files changed, 20 insertions(+), 1 deletion(-)
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
|
|
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 6c1a9543b9..23d564d6a0 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 |
@@ -517,6 +517,18 @@ static int context_raise_session_detach(sysview_context *c, sysview_session *ses
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
return context_raise(c, &event, 0);
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
}
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
+static int context_raise_device_change(sysview_context *c, sysview_device *device, struct udev_device *ud) {
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
+ sysview_event event = {
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
+ .type = SYSVIEW_EVENT_DEVICE_CHANGE,
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
+ .device_change = {
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
+ .device = device,
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
+ .ud = ud,
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
+ }
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
+ };
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
+
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
+ return context_raise(c, &event, 0);
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
+}
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
+
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
static int context_add_device(sysview_context *c, sysview_device *device) {
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
sysview_session *session;
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
int r, error = 0;
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
@@ -872,7 +884,7 @@ static int context_ud_hotplug(sysview_context *c, struct udev_device *d) {
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
if (!device)
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
return 0;
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
- /* TODO: send REFRESH event */
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
+ return context_raise_device_change(c, device, d);
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
} else if (!action || streq_ptr(action, "add")) {
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
struct udev_device *p;
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
unsigned int type, t;
|
|
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 de6ff371db..b9452fab89 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 |
@@ -64,6 +64,8 @@ enum {
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
SYSVIEW_EVENT_SESSION_ATTACH,
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
SYSVIEW_EVENT_SESSION_DETACH,
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
SYSVIEW_EVENT_SESSION_CONTROL,
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
+
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
+ SYSVIEW_EVENT_DEVICE_CHANGE,
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
};
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
struct sysview_event {
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
@@ -94,6 +96,11 @@ struct sysview_event {
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
sysview_session *session;
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
int error;
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
} session_control;
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
+
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
+ struct {
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
+ sysview_device *device;
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
+ struct udev_device *ud;
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
+ } device_change;
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
};
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
};
|
|
Zbigniew Jędrzejewski-Szmek |
62fe94 |
|