From a9e904a0c8f7ac5bc9ddcf7b6cc3054f86afe723 Mon Sep 17 00:00:00 2001 From: Simon Ser Date: Mon, 9 Dec 2019 12:55:12 +0100 Subject: [PATCH] Add session boilerplate --- include/xdpw.h | 7 +++++++ meson.build | 1 + session.c | 43 +++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 51 insertions(+) create mode 100644 session.c diff --git a/include/xdpw.h b/include/xdpw.h index 54c290a..494f029 100644 --- a/include/xdpw.h +++ b/include/xdpw.h @@ -8,6 +8,10 @@ struct xdpw_request { sd_bus_slot *slot; }; +struct xdpw_session { + sd_bus_slot *slot; +}; + enum { PORTAL_RESPONSE_SUCCESS = 0, PORTAL_RESPONSE_CANCELLED = 1, @@ -19,4 +23,7 @@ int init_screenshot(sd_bus *bus); struct xdpw_request *request_create(sd_bus *bus, const char *object_path); void request_destroy(struct xdpw_request *req); +struct xdpw_session *session_create(sd_bus *bus, const char *object_path); +void session_destroy(struct xdpw_session *req); + #endif diff --git a/meson.build b/meson.build index 2bd704f..108e5d6 100644 --- a/meson.build +++ b/meson.build @@ -26,6 +26,7 @@ executable( files([ 'main.c', 'request.c', + 'session.c', 'screenshot.c', ]), dependencies: [ diff --git a/session.c b/session.c new file mode 100644 index 0000000..c7f51ba --- /dev/null +++ b/session.c @@ -0,0 +1,43 @@ +#include +#include +#include +#include +#include "xdpw.h" + +static const char interface_name[] = "org.freedesktop.impl.portal.Session"; + +static int method_close(sd_bus_message *msg, void *data, + sd_bus_error *ret_error) { + // struct xdpw_session *session = data; + // TODO + printf("Session.Close\n"); + return 0; +} + +static const sd_bus_vtable session_vtable[] = { + SD_BUS_VTABLE_START(0), + SD_BUS_METHOD("Close", "", "", method_close, SD_BUS_VTABLE_UNPRIVILEGED), + SD_BUS_VTABLE_END +}; + +struct xdpw_session *session_create(sd_bus *bus, const char *object_path) { + struct xdpw_session *req = calloc(1, sizeof(struct xdpw_session)); + + if (sd_bus_add_object_vtable(bus, &req->slot, object_path, interface_name, + session_vtable, NULL) < 0) { + free(req); + fprintf(stderr, "sd_bus_add_object_vtable failed: %s\n", + strerror(-errno)); + return NULL; + } + + return req; +} + +void session_destroy(struct xdpw_session *req) { + if (req == NULL) { + return; + } + sd_bus_slot_unref(req->slot); + free(req); +}