diff options
Diffstat (limited to 'libdecor/src/plugins/cairo')
| -rw-r--r-- | libdecor/src/plugins/cairo/libdecor-cairo.c | 23 |
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; } |
