diff --git a/src/frames/main.c b/src/frames/main.c index 10e1dcae1..17435ced7 100644 --- a/src/frames/main.c +++ b/src/frames/main.c @@ -23,8 +23,49 @@ #include #include +#include #include +typedef void (* InitFunc) (void); + +static gboolean +should_load_libadwaita (void) +{ + g_auto(GStrv) desktops = NULL; + const char *current_desktop; + const char *platform_library; + + platform_library = g_getenv ("MUTTER_FRAMES_PLATFORM_LIBRARY"); + + if (g_strcmp0 (platform_library, "none") == 0) + return FALSE; + + if (g_strcmp0 (platform_library, "adwaita") == 0) + return TRUE; + + current_desktop = g_getenv ("XDG_CURRENT_DESKTOP"); + if (current_desktop != NULL) + desktops = g_strsplit (current_desktop, ":", -1); + + return desktops && g_strv_contains ((const char * const *) desktops, "GNOME"); +} + +static void +load_libadwaita (GdkDisplay *display) +{ + GModule *libadwaita; + InitFunc adw_init; + + libadwaita = g_module_open ("libadwaita-1.so.0", G_MODULE_BIND_LAZY); + if (!libadwaita) + return; + + if (!g_module_symbol (libadwaita, "adw_init", (gpointer *) &adw_init)) + return; + + adw_init (); +} + static gboolean on_sigterm (gpointer user_data) { @@ -57,6 +98,9 @@ main (int argc, display = gdk_display_get_default (); + if (should_load_libadwaita ()) + load_libadwaita (display); + xdisplay = gdk_x11_display_get_xdisplay (display); XFixesSetClientDisconnectMode (xdisplay, XFixesClientDisconnectFlagTerminate); diff --git a/src/frames/meson.build b/src/frames/meson.build index ea0838da2..c33bb52ad 100644 --- a/src/frames/meson.build +++ b/src/frames/meson.build @@ -9,6 +9,7 @@ x11_frames_sources = [ x11_frames = executable('mutter-x11-frames', sources: x11_frames_sources, dependencies: [ + gmodule_no_export_dep, gsettings_desktop_schemas_dep, gtk4_dep, x11_dep, diff --git a/src/frames/meta-frame.c b/src/frames/meta-frame.c index 3b3aae1f5..6c4c2b67a 100644 --- a/src/frames/meta-frame.c +++ b/src/frames/meta-frame.c @@ -527,6 +527,8 @@ meta_frame_class_init (MetaFrameClass *klass) static void meta_frame_init (MetaFrame *frame) { + gtk_widget_add_css_class (GTK_WIDGET (frame), "ssd-frame"); + g_signal_connect (frame, "close-request", G_CALLBACK (on_frame_close_request), NULL); }