commit ae9813080bb100482eb30288ecad81a49b7f26f6
parent c704742030d7ae8d797c9a7fc736c08fcab03bc3
Author: Michael Forney <mforney@mforney.org>
Date: Tue, 3 Dec 2013 20:33:50 -0800
Move data_device_manager initialization to swc.c
Also keep track of global created.
Diffstat:
4 files changed, 38 insertions(+), 15 deletions(-)
diff --git a/libswc/compositor.c b/libswc/compositor.c
@@ -416,7 +416,6 @@ void swc_compositor_add_globals(struct swc_compositor * compositor,
wl_global_create(display, &wl_compositor_interface, 3, compositor,
&bind_compositor);
- swc_data_device_manager_add_globals(display);
swc_drm_add_globals(&compositor->drm, display);
wl_list_for_each(output, &compositor->outputs, link)
diff --git a/libswc/data_device_manager.c b/libswc/data_device_manager.c
@@ -27,6 +27,11 @@
#include "internal.h"
#include "seat.h"
+static struct
+{
+ struct wl_global * global;
+} data_device_manager;
+
static void create_data_source(struct wl_client * client,
struct wl_resource * resource, uint32_t id)
{
@@ -62,9 +67,17 @@ static void bind_data_device_manager(struct wl_client * client, void * data,
(resource, &data_device_manager_implementation, NULL, NULL);
}
-void swc_data_device_manager_add_globals(struct wl_display * display)
+bool swc_data_device_manager_initialize()
+{
+ data_device_manager.global
+ = wl_global_create(swc.display, &wl_data_device_manager_interface, 1,
+ NULL, &bind_data_device_manager);
+
+ return data_device_manager.global != NULL;
+}
+
+void swc_data_device_manager_finalize()
{
- wl_global_create(display, &wl_data_device_manager_interface, 1, NULL,
- &bind_data_device_manager);
+ wl_global_destroy(data_device_manager.global);
}
diff --git a/libswc/data_device_manager.h b/libswc/data_device_manager.h
@@ -24,9 +24,10 @@
#ifndef SWC_DATA_DEVICE_MANAGER_H
#define SWC_DATA_DEVICE_MANAGER_H
-#include <wayland-server.h>
+#include <stdbool.h>
-void swc_data_device_manager_add_globals(struct wl_display * display);
+bool swc_data_device_manager_initialize();
+void swc_data_device_manager_finalize();
#endif
diff --git a/libswc/swc.c b/libswc/swc.c
@@ -24,6 +24,7 @@
#include "swc.h"
#include "bindings.h"
#include "compositor.h"
+#include "data_device_manager.h"
#include "internal.h"
#include "keyboard.h"
#include "pointer.h"
@@ -71,22 +72,28 @@ bool swc_initialize(struct wl_display * display,
goto error0;
}
+ if (!swc_data_device_manager_initialize())
+ {
+ ERROR("Could not initialize data device manager\n");
+ goto error1;
+ }
+
if (!swc_seat_initialize())
{
fprintf(stderr, "Could not initialize seat\n");
- goto error1;
+ goto error2;
}
if (!swc_bindings_initialize())
{
fprintf(stderr, "Could not initialize bindings\n");
- goto error2;
+ goto error3;
}
if (!swc_compositor_initialize(&compositor, display, swc.event_loop))
{
fprintf(stderr, "Could not initialize compositor\n");
- goto error3;
+ goto error4;
}
swc_compositor_add_globals(&compositor, display);
@@ -94,14 +101,14 @@ bool swc_initialize(struct wl_display * display,
if (!swc_shell_initialize())
{
fprintf(stderr, "Could not initialize shell\n");
- goto error4;
+ goto error5;
}
#ifdef ENABLE_XWAYLAND
if (!swc_xserver_initialize())
{
fprintf(stderr, "Could not initialize xwayland\n");
- goto error5;
+ goto error6;
}
#endif
@@ -109,14 +116,16 @@ bool swc_initialize(struct wl_display * display,
return true;
- error5:
+ error6:
swc_shell_finalize();
- error4:
+ error5:
swc_compositor_finish(&compositor);
- error3:
+ error4:
swc_bindings_finalize();
- error2:
+ error3:
swc_seat_finalize();
+ error2:
+ swc_data_device_manager_finalize();
error1:
udev_unref(swc.udev);
error0:
@@ -133,6 +142,7 @@ void swc_finalize()
swc_compositor_finish(&compositor);
swc_bindings_finalize();
swc_seat_finalize();
+ swc_data_device_manager_finalize();
udev_unref(swc.udev);
}