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:
#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()
With this patch Aui docking works on Ubuntu 24.04/Wayland:
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)