Zbigniew Jędrzejewski-Szmek 62fe94
From f2a15d86ccd0729e1442f40679cd393417e1e177 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, 22 Sep 2014 17:37:21 +0200
Zbigniew Jędrzejewski-Szmek 62fe94
Subject: [PATCH] terminal: allow user-context to be retrieved/stored
Zbigniew Jędrzejewski-Szmek 62fe94
Zbigniew Jędrzejewski-Szmek 62fe94
Add "userdata" storage to a bunch of external objects, namely displays and
Zbigniew Jędrzejewski-Szmek 62fe94
sessions. Furthermore, add some property retrieval helpers.
Zbigniew Jędrzejewski-Szmek 62fe94
Zbigniew Jędrzejewski-Szmek 62fe94
This is required if we want external API users to not duplicate our own
Zbigniew Jędrzejewski-Szmek 62fe94
object hashtables, but retrieve context from the objects themselves.
Zbigniew Jędrzejewski-Szmek 62fe94
---
Zbigniew Jędrzejewski-Szmek 62fe94
 src/libsystemd-terminal/grdev-internal.h   |  1 +
Zbigniew Jędrzejewski-Szmek 62fe94
 src/libsystemd-terminal/grdev.c            | 18 ++++++++++++++++++
Zbigniew Jędrzejewski-Szmek 62fe94
 src/libsystemd-terminal/grdev.h            |  5 +++++
Zbigniew Jędrzejewski-Szmek 62fe94
 src/libsystemd-terminal/sysview-internal.h |  1 +
Zbigniew Jędrzejewski-Szmek 62fe94
 src/libsystemd-terminal/sysview.c          | 18 ++++++++++++++++++
Zbigniew Jędrzejewski-Szmek 62fe94
 src/libsystemd-terminal/sysview.h          |  4 ++++
Zbigniew Jędrzejewski-Szmek 62fe94
 6 files changed, 47 insertions(+)
Zbigniew Jędrzejewski-Szmek 62fe94
Zbigniew Jędrzejewski-Szmek 62fe94
diff --git a/src/libsystemd-terminal/grdev-internal.h b/src/libsystemd-terminal/grdev-internal.h
Zbigniew Jędrzejewski-Szmek 62fe94
index f5915b16e8..ee182695ce 100644
Zbigniew Jędrzejewski-Szmek 62fe94
--- a/src/libsystemd-terminal/grdev-internal.h
Zbigniew Jędrzejewski-Szmek 62fe94
+++ b/src/libsystemd-terminal/grdev-internal.h
Zbigniew Jędrzejewski-Szmek 62fe94
@@ -94,6 +94,7 @@ DEFINE_TRIVIAL_CLEANUP_FUNC(grdev_tile*, grdev_tile_free);
Zbigniew Jędrzejewski-Szmek 62fe94
 struct grdev_display {
Zbigniew Jędrzejewski-Szmek 62fe94
         grdev_session *session;
Zbigniew Jędrzejewski-Szmek 62fe94
         char *name;
Zbigniew Jędrzejewski-Szmek 62fe94
+        void *userdata;
Zbigniew Jędrzejewski-Szmek 62fe94
 
Zbigniew Jędrzejewski-Szmek 62fe94
         size_t n_leafs;
Zbigniew Jędrzejewski-Szmek 62fe94
         grdev_tile *tile;
Zbigniew Jędrzejewski-Szmek 62fe94
diff --git a/src/libsystemd-terminal/grdev.c b/src/libsystemd-terminal/grdev.c
Zbigniew Jędrzejewski-Szmek 62fe94
index 43d0c7c9bf..e34112ee7c 100644
Zbigniew Jędrzejewski-Szmek 62fe94
--- a/src/libsystemd-terminal/grdev.c
Zbigniew Jędrzejewski-Szmek 62fe94
+++ b/src/libsystemd-terminal/grdev.c
Zbigniew Jędrzejewski-Szmek 62fe94
@@ -282,6 +282,24 @@ grdev_display *grdev_display_free(grdev_display *display) {
Zbigniew Jędrzejewski-Szmek 62fe94
         return NULL;
Zbigniew Jędrzejewski-Szmek 62fe94
 }
Zbigniew Jędrzejewski-Szmek 62fe94
 
Zbigniew Jędrzejewski-Szmek 62fe94
+void grdev_display_set_userdata(grdev_display *display, void *userdata) {
Zbigniew Jędrzejewski-Szmek 62fe94
+        assert(display);
Zbigniew Jędrzejewski-Szmek 62fe94
+
Zbigniew Jędrzejewski-Szmek 62fe94
+        display->userdata = userdata;
Zbigniew Jędrzejewski-Szmek 62fe94
+}
Zbigniew Jędrzejewski-Szmek 62fe94
+
Zbigniew Jędrzejewski-Szmek 62fe94
+void *grdev_display_get_userdata(grdev_display *display) {
Zbigniew Jędrzejewski-Szmek 62fe94
+        assert_return(display, NULL);
Zbigniew Jędrzejewski-Szmek 62fe94
+
Zbigniew Jędrzejewski-Szmek 62fe94
+        return display->userdata;
Zbigniew Jędrzejewski-Szmek 62fe94
+}
Zbigniew Jędrzejewski-Szmek 62fe94
+
Zbigniew Jędrzejewski-Szmek 62fe94
+const char *grdev_display_get_name(grdev_display *display) {
Zbigniew Jędrzejewski-Szmek 62fe94
+        assert_return(display, NULL);
Zbigniew Jędrzejewski-Szmek 62fe94
+
Zbigniew Jędrzejewski-Szmek 62fe94
+        return display->name;
Zbigniew Jędrzejewski-Szmek 62fe94
+}
Zbigniew Jędrzejewski-Szmek 62fe94
+
Zbigniew Jędrzejewski-Szmek 62fe94
 bool grdev_display_is_enabled(grdev_display *display) {
Zbigniew Jędrzejewski-Szmek 62fe94
         return display && display->enabled;
Zbigniew Jędrzejewski-Szmek 62fe94
 }
Zbigniew Jędrzejewski-Szmek 62fe94
diff --git a/src/libsystemd-terminal/grdev.h b/src/libsystemd-terminal/grdev.h
Zbigniew Jędrzejewski-Szmek 62fe94
index 9924a257b6..5f745aaad4 100644
Zbigniew Jędrzejewski-Szmek 62fe94
--- a/src/libsystemd-terminal/grdev.h
Zbigniew Jędrzejewski-Szmek 62fe94
+++ b/src/libsystemd-terminal/grdev.h
Zbigniew Jędrzejewski-Szmek 62fe94
@@ -108,6 +108,11 @@ struct grdev_display_target {
Zbigniew Jędrzejewski-Szmek 62fe94
         const grdev_fb *fb;
Zbigniew Jędrzejewski-Szmek 62fe94
 };
Zbigniew Jędrzejewski-Szmek 62fe94
 
Zbigniew Jędrzejewski-Szmek 62fe94
+void grdev_display_set_userdata(grdev_display *display, void *userdata);
Zbigniew Jędrzejewski-Szmek 62fe94
+void *grdev_display_get_userdata(grdev_display *display);
Zbigniew Jędrzejewski-Szmek 62fe94
+
Zbigniew Jędrzejewski-Szmek 62fe94
+const char *grdev_display_get_name(grdev_display *display);
Zbigniew Jędrzejewski-Szmek 62fe94
+
Zbigniew Jędrzejewski-Szmek 62fe94
 bool grdev_display_is_enabled(grdev_display *display);
Zbigniew Jędrzejewski-Szmek 62fe94
 void grdev_display_enable(grdev_display *display);
Zbigniew Jędrzejewski-Szmek 62fe94
 void grdev_display_disable(grdev_display *display);
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 9299fabb82..d9f7fe3301 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
@@ -64,6 +64,7 @@ struct sysview_session {
Zbigniew Jędrzejewski-Szmek 62fe94
         sysview_seat *seat;
Zbigniew Jędrzejewski-Szmek 62fe94
         char *name;
Zbigniew Jędrzejewski-Szmek 62fe94
         char *path;
Zbigniew Jędrzejewski-Szmek 62fe94
+        void *userdata;
Zbigniew Jędrzejewski-Szmek 62fe94
 
Zbigniew Jędrzejewski-Szmek 62fe94
         sd_bus_slot *slot_take_control;
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 5b623c1e6c..208c6ce25c 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
@@ -104,6 +104,12 @@ sysview_device *sysview_device_free(sysview_device *device) {
Zbigniew Jędrzejewski-Szmek 62fe94
         return NULL;
Zbigniew Jędrzejewski-Szmek 62fe94
 }
Zbigniew Jędrzejewski-Szmek 62fe94
 
Zbigniew Jędrzejewski-Szmek 62fe94
+const char *sysview_device_get_name(sysview_device *device) {
Zbigniew Jędrzejewski-Szmek 62fe94
+        assert_return(device, NULL);
Zbigniew Jędrzejewski-Szmek 62fe94
+
Zbigniew Jędrzejewski-Szmek 62fe94
+        return device->name;
Zbigniew Jędrzejewski-Szmek 62fe94
+}
Zbigniew Jędrzejewski-Szmek 62fe94
+
Zbigniew Jędrzejewski-Szmek 62fe94
 unsigned int sysview_device_get_type(sysview_device *device) {
Zbigniew Jędrzejewski-Szmek 62fe94
         assert_return(device, (unsigned)-1);
Zbigniew Jędrzejewski-Szmek 62fe94
 
Zbigniew Jędrzejewski-Szmek 62fe94
@@ -243,6 +249,18 @@ sysview_session *sysview_session_free(sysview_session *session) {
Zbigniew Jędrzejewski-Szmek 62fe94
         return NULL;
Zbigniew Jędrzejewski-Szmek 62fe94
 }
Zbigniew Jędrzejewski-Szmek 62fe94
 
Zbigniew Jędrzejewski-Szmek 62fe94
+void sysview_session_set_userdata(sysview_session *session, void *userdata) {
Zbigniew Jędrzejewski-Szmek 62fe94
+        assert(session);
Zbigniew Jędrzejewski-Szmek 62fe94
+
Zbigniew Jędrzejewski-Szmek 62fe94
+        session->userdata = userdata;
Zbigniew Jędrzejewski-Szmek 62fe94
+}
Zbigniew Jędrzejewski-Szmek 62fe94
+
Zbigniew Jędrzejewski-Szmek 62fe94
+void *sysview_session_get_userdata(sysview_session *session) {
Zbigniew Jędrzejewski-Szmek 62fe94
+        assert_return(session, NULL);
Zbigniew Jędrzejewski-Szmek 62fe94
+
Zbigniew Jędrzejewski-Szmek 62fe94
+        return session->userdata;
Zbigniew Jędrzejewski-Szmek 62fe94
+}
Zbigniew Jędrzejewski-Szmek 62fe94
+
Zbigniew Jędrzejewski-Szmek 62fe94
 const char *sysview_session_get_name(sysview_session *session) {
Zbigniew Jędrzejewski-Szmek 62fe94
         assert_return(session, NULL);
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 4d800f8d69..f691e492d5 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
@@ -116,6 +116,7 @@ enum {
Zbigniew Jędrzejewski-Szmek 62fe94
         SYSVIEW_DEVICE_CNT
Zbigniew Jędrzejewski-Szmek 62fe94
 };
Zbigniew Jędrzejewski-Szmek 62fe94
 
Zbigniew Jędrzejewski-Szmek 62fe94
+const char *sysview_device_get_name(sysview_device *device);
Zbigniew Jędrzejewski-Szmek 62fe94
 unsigned int sysview_device_get_type(sysview_device *device);
Zbigniew Jędrzejewski-Szmek 62fe94
 struct udev_device *sysview_device_get_ud(sysview_device *device);
Zbigniew Jędrzejewski-Szmek 62fe94
 
Zbigniew Jędrzejewski-Szmek 62fe94
@@ -123,6 +124,9 @@ struct udev_device *sysview_device_get_ud(sysview_device *device);
Zbigniew Jędrzejewski-Szmek 62fe94
  * Sessions
Zbigniew Jędrzejewski-Szmek 62fe94
  */
Zbigniew Jędrzejewski-Szmek 62fe94
 
Zbigniew Jędrzejewski-Szmek 62fe94
+void sysview_session_set_userdata(sysview_session *session, void *userdata);
Zbigniew Jędrzejewski-Szmek 62fe94
+void *sysview_session_get_userdata(sysview_session *session);
Zbigniew Jędrzejewski-Szmek 62fe94
+
Zbigniew Jędrzejewski-Szmek 62fe94
 const char *sysview_session_get_name(sysview_session *session);
Zbigniew Jędrzejewski-Szmek 62fe94
 
Zbigniew Jędrzejewski-Szmek 62fe94
 int sysview_session_take_control(sysview_session *session);