diff --git a/src/backends/meta-dnd-private.h b/src/backends/meta-dnd-private.h index fb6d4928a..33e2e9c96 100644 --- a/src/backends/meta-dnd-private.h +++ b/src/backends/meta-dnd-private.h @@ -24,6 +24,7 @@ #ifdef HAVE_X11 #include #include "compositor/meta-compositor-x11.h" +#include "meta/meta-x11-types.h" #endif #include "backends/meta-backend-private.h" diff --git a/src/backends/x11/meta-input-settings-x11.c b/src/backends/x11/meta-input-settings-x11.c index 5001b2dd4..c845d1e5e 100644 --- a/src/backends/x11/meta-input-settings-x11.c +++ b/src/backends/x11/meta-input-settings-x11.c @@ -30,7 +30,7 @@ #include "backends/x11/meta-backend-x11.h" #include "backends/x11/meta-input-device-x11.h" -#include "core/display-private.h" +#include "meta/meta-x11-display.h" #include "mtk/mtk-x11.h" typedef struct diff --git a/src/core/display-private.h b/src/core/display-private.h index 19926d383..b8294d22f 100644 --- a/src/core/display-private.h +++ b/src/core/display-private.h @@ -65,6 +65,12 @@ typedef enum typedef void (* MetaDisplayWindowFunc) (MetaWindow *window, gpointer user_data); + +/* To avoid ifdefing MetaX11Display usage when built without X11 support */ +#ifndef HAVE_X11_CLIENT +typedef struct MetaX11Display MetaX11Display; +#endif + struct _MetaDisplay { GObject parent_instance; diff --git a/src/core/display.c b/src/core/display.c index 955b299a3..5316d4df0 100644 --- a/src/core/display.c +++ b/src/core/display.c @@ -927,6 +927,7 @@ on_x11_initialized (MetaDisplay *display, } #endif /* HAVE_XWAYLAND */ +#ifdef HAVE_X11_CLIENT void meta_display_shutdown_x11 (MetaDisplay *display) { @@ -939,6 +940,7 @@ meta_display_shutdown_x11 (MetaDisplay *display) g_clear_object (&display->x11_display); meta_stack_thaw (display->stack); } +#endif MetaDisplay * meta_display_new (MetaContext *context, @@ -969,7 +971,9 @@ meta_display_new (MetaContext *context, display->autoraise_window = NULL; display->focus_window = NULL; display->workspace_manager = NULL; +#ifdef HAVE_X11_CLIENT display->x11_display = NULL; +#endif display->current_cursor = -1; /* invalid/unset */ display->check_fullscreen_later = 0; @@ -1282,7 +1286,9 @@ meta_display_close (MetaDisplay *display, meta_stack_tracker_free); g_clear_pointer (&display->compositor, meta_compositor_destroy); +#ifdef HAVE_X11_CLIENT meta_display_shutdown_x11 (display); +#endif g_clear_object (&display->stack); /* Must be after all calls to meta_window_unmanage() since they @@ -2584,17 +2590,6 @@ meta_display_get_compositor (MetaDisplay *display) return display->compositor; } -/** - * meta_display_get_x11_display: (skip) - * @display: a #MetaDisplay - * - */ -MetaX11Display * -meta_display_get_x11_display (MetaDisplay *display) -{ - return display->x11_display; -} - /** * meta_display_get_size: * @display: A #MetaDisplay diff --git a/src/core/keybindings-private.h b/src/core/keybindings-private.h index bf21bc1b4..d84733027 100644 --- a/src/core/keybindings-private.h +++ b/src/core/keybindings-private.h @@ -31,6 +31,9 @@ #include "core/meta-accel-parse.h" #include "meta/keybindings.h" +#ifdef HAVE_X11 +#include "meta/meta-x11-types.h" +#endif typedef struct _MetaKeyHandler MetaKeyHandler; struct _MetaKeyHandler diff --git a/src/meta/display.h b/src/meta/display.h index c79aadcb6..460a62eda 100644 --- a/src/meta/display.h +++ b/src/meta/display.h @@ -80,8 +80,6 @@ typedef struct _MetaDisplayClass MetaDisplayClass; META_EXPORT GType meta_display_get_type (void) G_GNUC_CONST; -#define meta_XFree(p) do { if ((p)) XFree ((p)); } while (0) - META_EXPORT void meta_display_close (MetaDisplay *display, guint32 timestamp); @@ -92,9 +90,6 @@ MetaContext * meta_display_get_context (MetaDisplay *display); META_EXPORT MetaCompositor *meta_display_get_compositor (MetaDisplay *display); -META_EXPORT -MetaX11Display *meta_display_get_x11_display (MetaDisplay *display); - META_EXPORT MetaWindow *meta_display_get_focus_window (MetaDisplay *display); diff --git a/src/meta/group.h b/src/meta/group.h index 35bb28934..9feea0e15 100644 --- a/src/meta/group.h +++ b/src/meta/group.h @@ -28,6 +28,7 @@ #include "meta/common.h" #include "meta/types.h" +#include "meta/meta-x11-types.h" /* note, can return NULL */ META_EXPORT diff --git a/src/meta/meson.build b/src/meta/meson.build index bc3910408..b1e8d18e0 100644 --- a/src/meta/meson.build +++ b/src/meta/meson.build @@ -58,9 +58,10 @@ if have_wayland ] endif -if have_x11 +if have_x11_client mutter_public_headers += [ 'meta-x11-display.h', + 'meta-x11-types.h', ] endif diff --git a/src/meta/meta-x11-display.h b/src/meta/meta-x11-display.h index e06fbaf48..68d0fbfe1 100644 --- a/src/meta/meta-x11-display.h +++ b/src/meta/meta-x11-display.h @@ -26,6 +26,9 @@ #include "meta/common.h" #include "meta/prefs.h" #include "meta/types.h" +#include "meta/meta-x11-types.h" + +#define meta_XFree(p) do { if ((p)) XFree ((p)); } while (0) typedef void (* MetaX11DisplayEventFunc) (MetaX11Display *x11_display, XEvent *xev, @@ -63,3 +66,6 @@ void meta_x11_display_redirect_windows (MetaX11Display *x11_display, META_EXPORT Window meta_x11_display_lookup_xwindow (MetaX11Display *x11_display, MetaWindow *window); + +META_EXPORT +MetaX11Display * meta_display_get_x11_display (MetaDisplay *display); diff --git a/src/meta/meta-x11-types.h b/src/meta/meta-x11-types.h new file mode 100644 index 000000000..e827a5510 --- /dev/null +++ b/src/meta/meta-x11-types.h @@ -0,0 +1,21 @@ +/* + * Copyright (C) 2024 Bilal Elmoussaoui + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License as + * published by the Free Software Foundation; either version 2 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, see . + */ + +#pragma once + +typedef struct _MetaX11Display MetaX11Display; +typedef struct _MetaGroup MetaGroup; diff --git a/src/meta/types.h b/src/meta/types.h index d994fb2d2..0bb4fd2c6 100644 --- a/src/meta/types.h +++ b/src/meta/types.h @@ -23,12 +23,10 @@ typedef struct _MetaBackend MetaBackend; typedef struct _MetaContext MetaContext; typedef struct _MetaCompositor MetaCompositor; typedef struct _MetaDisplay MetaDisplay; -typedef struct _MetaX11Display MetaX11Display; typedef struct _MetaWindow MetaWindow; typedef struct _MetaWorkspace MetaWorkspace; typedef struct _MetaLaters MetaLaters; -typedef struct _MetaGroup MetaGroup; typedef struct _MetaKeyBinding MetaKeyBinding; typedef struct _MetaCursorTracker MetaCursorTracker; diff --git a/src/tests/meta-context-test.c b/src/tests/meta-context-test.c index 8246fb7c8..54459f6ad 100644 --- a/src/tests/meta-context-test.c +++ b/src/tests/meta-context-test.c @@ -26,6 +26,7 @@ #include #include "core/meta-context-private.h" +#include "meta/meta-x11-display.h" #include "tests/meta-backend-test.h" #include "tests/meta-test-shell.h" #include "tests/meta-test-utils-private.h" diff --git a/src/tests/meta-test-utils.h b/src/tests/meta-test-utils.h index aa56cb340..8273f057e 100644 --- a/src/tests/meta-test-utils.h +++ b/src/tests/meta-test-utils.h @@ -25,6 +25,7 @@ #include "backends/meta-backend-types.h" #include "backends/meta-virtual-monitor.h" +#include "meta/meta-x11-types.h" #include "meta/window.h" #define META_TEST_CLIENT_ERROR meta_test_client_error_quark () diff --git a/src/x11/events.h b/src/x11/events.h index 04a657b4d..bb4dbf9ed 100644 --- a/src/x11/events.h +++ b/src/x11/events.h @@ -22,7 +22,7 @@ #pragma once -#include "meta/display.h" +#include "meta/meta-x11-display.h" void meta_x11_display_init_events (MetaX11Display *x11_display); void meta_x11_display_free_events (MetaX11Display *x11_display); diff --git a/src/x11/meta-x11-display.c b/src/x11/meta-x11-display.c index c1e749181..36e4f9d66 100644 --- a/src/x11/meta-x11-display.c +++ b/src/x11/meta-x11-display.c @@ -2572,3 +2572,14 @@ meta_x11_display_lookup_xwindow (MetaX11Display *x11_display, return None; } + +/** + * meta_display_get_x11_display: (skip) + * @display: a #MetaDisplay + * + */ +MetaX11Display * +meta_display_get_x11_display (MetaDisplay *display) +{ + return display->x11_display; +} diff --git a/src/x11/xprops.h b/src/x11/xprops.h index 2e40a0df8..3a52ad25b 100644 --- a/src/x11/xprops.h +++ b/src/x11/xprops.h @@ -24,7 +24,7 @@ #include #include -#include "meta/display.h" +#include "meta/meta-x11-display.h" /* Copied from Lesstif by way of GTK. Rudimentary docs can be * found in some Motif reference guides online.