Merge pull request #1422 from emersion/dmabuf-export-destroy

export-dmabuf-v1: add missing destroy request handler
This commit is contained in:
Drew DeVault 2018-12-06 18:03:42 -05:00 committed by GitHub
commit e75075dfa2
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 22 additions and 15 deletions

View file

@ -13,12 +13,22 @@
#include <wayland-server.h> #include <wayland-server.h>
#include <wlr/render/dmabuf.h> #include <wlr/render/dmabuf.h>
struct wlr_export_dmabuf_manager_v1; struct wlr_export_dmabuf_manager_v1 {
struct wl_global *global;
struct wl_list resources; // wl_resource_get_link
struct wl_list frames; // wlr_export_dmabuf_frame_v1::link
struct wl_listener display_destroy;
struct {
struct wl_signal destroy;
} events;
};
struct wlr_export_dmabuf_frame_v1 { struct wlr_export_dmabuf_frame_v1 {
struct wl_resource *resource; struct wl_resource *resource;
struct wlr_export_dmabuf_manager_v1 *manager; struct wlr_export_dmabuf_manager_v1 *manager;
struct wl_list link; struct wl_list link; // wlr_export_dmabuf_manager_v1::frames
struct wlr_dmabuf_attributes attribs; struct wlr_dmabuf_attributes attribs;
struct wlr_output *output; struct wlr_output *output;
@ -28,18 +38,6 @@ struct wlr_export_dmabuf_frame_v1 {
struct wl_listener output_swap_buffers; struct wl_listener output_swap_buffers;
}; };
struct wlr_export_dmabuf_manager_v1 {
struct wl_global *global;
struct wl_list resources;
struct wl_list frames;
struct wl_listener display_destroy;
struct {
struct wl_signal destroy;
} events;
};
struct wlr_export_dmabuf_manager_v1 *wlr_export_dmabuf_manager_v1_create( struct wlr_export_dmabuf_manager_v1 *wlr_export_dmabuf_manager_v1_create(
struct wl_display *display); struct wl_display *display);
void wlr_export_dmabuf_manager_v1_destroy( void wlr_export_dmabuf_manager_v1_destroy(

View file

@ -5,8 +5,9 @@
#include <wlr/render/dmabuf.h> #include <wlr/render/dmabuf.h>
#include <wlr/types/wlr_export_dmabuf_v1.h> #include <wlr/types/wlr_export_dmabuf_v1.h>
#include <wlr/types/wlr_output.h> #include <wlr/types/wlr_output.h>
#include "wlr-export-dmabuf-unstable-v1-protocol.h"
#include <wlr/util/log.h> #include <wlr/util/log.h>
#include "util/signal.h"
#include "wlr-export-dmabuf-unstable-v1-protocol.h"
#define EXPORT_DMABUF_MANAGER_VERSION 1 #define EXPORT_DMABUF_MANAGER_VERSION 1
@ -146,8 +147,14 @@ static void manager_handle_capture_output(struct wl_client *client,
frame->output_swap_buffers.notify = frame_output_handle_swap_buffers; frame->output_swap_buffers.notify = frame_output_handle_swap_buffers;
} }
static void manager_handle_destroy(struct wl_client *client,
struct wl_resource *manager_resource) {
wl_resource_destroy(manager_resource);
}
static const struct zwlr_export_dmabuf_manager_v1_interface manager_impl = { static const struct zwlr_export_dmabuf_manager_v1_interface manager_impl = {
.capture_output = manager_handle_capture_output, .capture_output = manager_handle_capture_output,
.destroy = manager_handle_destroy,
}; };
static void manager_handle_resource_destroy(struct wl_resource *resource) { static void manager_handle_resource_destroy(struct wl_resource *resource) {
@ -185,6 +192,7 @@ struct wlr_export_dmabuf_manager_v1 *wlr_export_dmabuf_manager_v1_create(
} }
wl_list_init(&manager->resources); wl_list_init(&manager->resources);
wl_list_init(&manager->frames); wl_list_init(&manager->frames);
wl_signal_init(&manager->events.destroy);
manager->global = wl_global_create(display, manager->global = wl_global_create(display,
&zwlr_export_dmabuf_manager_v1_interface, EXPORT_DMABUF_MANAGER_VERSION, &zwlr_export_dmabuf_manager_v1_interface, EXPORT_DMABUF_MANAGER_VERSION,
@ -205,6 +213,7 @@ void wlr_export_dmabuf_manager_v1_destroy(
if (manager == NULL) { if (manager == NULL) {
return; return;
} }
wlr_signal_emit_safe(&manager->events.destroy, manager);
wl_list_remove(&manager->display_destroy.link); wl_list_remove(&manager->display_destroy.link);
wl_global_destroy(manager->global); wl_global_destroy(manager->global);
struct wl_resource *resource, *resource_tmp; struct wl_resource *resource, *resource_tmp;