Author Topic: Force X11 compatibility mode  (Read 357 times)

Offline Miguel Gimenez

  • Developer
  • Lives here!
  • *****
  • Posts: 1861
Force X11 compatibility mode
« on: May 22, 2026, 02:38:14 pm »
Currently most Linux distributions are removing X11 support forcing Wayland usage.

C::B relies heavily on Aui, and currently Aui does not work correctly with Wayland. Forcing XWayland, if it is available, would make Aui work again on these systems (this is the method used by KiCAD).

Adding these lines to OnInit() should be enough:

Code
#ifdef __WXGTK__
    wxSetEnv("GDK_BACKEND", "x11");
#endif

Opinions?

EDIT: The change does not work, while "GDK_BACKEND=x11 ./codeblocks" works. Looks like the variable must be set using setenv() just before the App object is created, i.e., before the call to wxEntry()

« Last Edit: Yesterday at 10:54:32 am by Miguel Gimenez »

Offline Miguel Gimenez

  • Developer
  • Lives here!
  • *****
  • Posts: 1861
Re: Force X11 compatibility mode
« Reply #1 on: Yesterday at 10:53:40 am »
With this patch Aui docking works on Ubuntu 24.04/Wayland:

Code
Index: src/src/app.cpp
===================================================================
--- src/src/app.cpp (revision: 13846)
+++ src/src/app.cpp (copia de trabajo)
@@ -367,8 +367,19 @@
 
 } // namespace
 
-IMPLEMENT_APP(CodeBlocksApp) // TODO: This gives a "redundant declaration" warning, though I think it's false. Dig through macro and check.
+#ifdef __WXGTK__
+wxIMPLEMENT_APP_NO_MAIN(CodeBlocksApp);
 
+int main(int argc, char **argv)
+{
+    setenv("GDK_BACKEND", "x11", 1);
+    wxDISABLE_DEBUG_SUPPORT();
+    return wxEntry(argc, argv);
+}
+#else
+wxIMPLEMENT_APP(CodeBlocksApp);
+#endif
+
 BEGIN_EVENT_TABLE(CodeBlocksApp, wxApp)
     EVT_ACTIVATE_APP(CodeBlocksApp::OnAppActivate)
     EVT_TASKBAR_LEFT_DOWN(CodeBlocksApp::OnTBIconLeftDown)

Offline blauzahn

  • Almost regular
  • **
  • Posts: 231
Re: Force X11 compatibility mode
« Reply #2 on: Yesterday at 03:00:32 pm »
With that patch, docking is fixed under Arch Linux Wayland as well, e.g. open-files-list dock.

Wonderful! Thank you.