summaryrefslogtreecommitdiff
path: root/libdecor/src/plugins/cairo
diff options
context:
space:
mode:
Diffstat (limited to 'libdecor/src/plugins/cairo')
-rw-r--r--libdecor/src/plugins/cairo/libdecor-cairo.c23
1 files changed, 13 insertions, 10 deletions
diff --git a/libdecor/src/plugins/cairo/libdecor-cairo.c b/libdecor/src/plugins/cairo/libdecor-cairo.c
index 6113066a3..5951e93b5 100644
--- a/libdecor/src/plugins/cairo/libdecor-cairo.c
+++ b/libdecor/src/plugins/cairo/libdecor-cairo.c
@@ -398,12 +398,15 @@ libdecor_plugin_cairo_destroy(struct libdecor_plugin *plugin)
free(plugin_cairo->cursor_theme_name);
- wl_shm_destroy(plugin_cairo->wl_shm);
+ if (plugin_cairo->wl_shm)
+ wl_shm_destroy(plugin_cairo->wl_shm);
pango_font_description_free(plugin_cairo->font);
- wl_compositor_destroy(plugin_cairo->wl_compositor);
- wl_subcompositor_destroy(plugin_cairo->wl_subcompositor);
+ if (plugin_cairo->wl_compositor)
+ wl_compositor_destroy(plugin_cairo->wl_compositor);
+ if (plugin_cairo->wl_subcompositor)
+ wl_subcompositor_destroy(plugin_cairo->wl_subcompositor);
libdecor_plugin_release(&plugin_cairo->plugin);
free(plugin_cairo);
@@ -2679,13 +2682,6 @@ globals_callback(void *user_data,
wl_callback_destroy(callback);
plugin_cairo->globals_callback = NULL;
-
- if (!has_required_globals(plugin_cairo)) {
- libdecor_notify_plugin_error(
- plugin_cairo->context,
- LIBDECOR_ERROR_COMPOSITOR_INCOMPATIBLE,
- "Compositor is missing required globals");
- }
}
static const struct wl_callback_listener globals_callback_listener = {
@@ -2731,6 +2727,13 @@ libdecor_plugin_new(struct libdecor *context)
wl_callback_add_listener(plugin_cairo->globals_callback,
&globals_callback_listener,
plugin_cairo);
+ wl_display_roundtrip(wl_display);
+
+ if (!has_required_globals(plugin_cairo)) {
+ fprintf(stderr, "libdecor-cairo-WARNING: Could not get required globals\n");
+ libdecor_plugin_cairo_destroy(&plugin_cairo->plugin);
+ return NULL;
+ }
return &plugin_cairo->plugin;
}