Skip to content

Commit

Permalink
Launch on xwayland under Wayland if no EGL
Browse files Browse the repository at this point in the history
On initialization, if wxWidgets was compiled without EGL support, check
in environment variables if running under Wayland and if so tell GDK to
prefer using an X11 backend, causing the program to launch under
xwayland.

Fix #1028

Signed-off-by: Rafael Kitover <rkitover@gmail.com>
  • Loading branch information
rkitover authored and Steelskin committed Sep 11, 2023
1 parent 93a24be commit aca206a
Showing 1 changed file with 13 additions and 0 deletions.
13 changes: 13 additions & 0 deletions src/wx/wxvbam.cpp
Expand Up @@ -47,6 +47,10 @@
#include "widgets/user-input-ctrl.h"
#include "wxhead.h"

#ifdef __WXGTK__
#include <gdk/gdk.h>
#endif

namespace {

// Resets the accelerator text for `menu_item` to the first keyboard input.
Expand Down Expand Up @@ -136,6 +140,15 @@ int main(int argc, char** argv) {
wxLog::SetLogLevel(wxLOG_Info);
#endif // DEBUG

// Launch under xwayland on Wayland if EGL is not available.
#if defined(__WXGTK__) && !defined(HAVE_WAYLAND_EGL)
wxString xdg_session_type = wxGetenv("XDG_SESSION_TYPE");
wxString wayland_display = wxGetenv("WAYLAND_DISPLAY");

if (xdg_session_type == "wayland" || wayland_display.Contains("wayland"))
gdk_set_allowed_backends("x11,*");
#endif

// This will be freed on wxEntry exit.
wxApp::SetInstance(new wxvbamApp());
return wxEntry(argc, argv);
Expand Down

0 comments on commit aca206a

Please sign in to comment.