summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorManoloFLTK <41016272+ManoloFLTK@users.noreply.github.com>2023-03-21 10:43:53 +0100
committerManoloFLTK <41016272+ManoloFLTK@users.noreply.github.com>2023-03-21 10:43:53 +0100
commit1a8d6662cefb05bb13e9214b087639bbd03ee950 (patch)
tree76b298f2e0205ac20308b3ec1aa7f9180c8e44f8
parent8178d95eb6fe5e1065f2baa221fac68acc2b9f20 (diff)
osissues.dox: add "The Wayland/X11 hybrid library"
-rw-r--r--README.Wayland.txt109
-rw-r--r--documentation/src/osissues.dox45
2 files changed, 61 insertions, 93 deletions
diff --git a/README.Wayland.txt b/README.Wayland.txt
index a07969b7e..98efcd5cd 100644
--- a/README.Wayland.txt
+++ b/README.Wayland.txt
@@ -11,15 +11,10 @@ Contents
2.1 Configuration
2.2 Known Limitations
- 3 Preparing Platform Specific Code for the Wayland Platform
- 3.1 Handling X11 specific Source Code
- 3.2 Handling X11 and Wayland Specific Source Code in the Same App
- 3.3 Forcing an FLTK App to Always Use the X11 Backend
-
- 4 Platform Specific Notes
- 4.1 Debian and Derivatives (like Ubuntu)
- 4.2 Fedora
- 4.3 FreeBSD
+ 3 Platform Specific Notes
+ 3.1 Debian and Derivatives (like Ubuntu)
+ 3.2 Fedora
+ 3.3 FreeBSD
1 Introduction
@@ -31,7 +26,7 @@ Pre-existing platform-independent source code for FLTK 1.3.x should build and
run unchanged with FLTK 1.4 and the Wayland platform.
The code has been tested on Debian, Ubuntu, RaspberryPiOS and Fedora with
3 distinct Wayland compositors: mutter (Gnome's compositor), weston, and KDE.
-The code has also been tested under FreeBSD and the sway wayland compositor.
+The code has also been tested under FreeBSD and the Sway Wayland compositor.
CJK text-input methods, as well as dead and compose keys are supported.
@@ -54,7 +49,12 @@ X11 is used at run time as follows:
compositor is available;
- if $FLTK_BACKEND has another value, the library stops with error.
-See also 3.3 below for another way to control whether Wayland or X11 is used.
+Alternatively, it is possible to force a program linked to a Wayland-enabled
+FLTK library to use X11 in all situations by putting this declaration somewhere
+in the source code :
+ FL_EXPORT bool fl_disable_wayland = true;
+FLTK source code and also X11-specific source code conceived for FLTK 1.3
+should run with a Wayland-enabled, FLTK 1.4 library with that single change only.
On pure Wayland systems without the X11 headers and libraries, FLTK can be built
with its Wayland backend only (see below).
@@ -63,7 +63,7 @@ with its Wayland backend only (see below).
------------------
On Linux and FreeBSD systems equipped with the adequate software packages
-(see section 4 below), the default building procedure produces a Wayland/X11
+(see section 3 below), the default building procedure produces a Wayland/X11
hybrid library. On systems lacking all or part of Wayland-required packages,
the default building procedure produces a X11-based library.
@@ -106,86 +106,13 @@ so feedback on this subject would be helpful.
although it works inside X11 windows on the same hardware.
-3 Preparing Platform Specific Code for the Wayland Platform
-===========================================================
-
-While platform-independent source code prepared for FLTK 1.3 is expected
-to be compatible with no change with FLTK 1.4 and the Wayland platform,
-X11-specific source code may require some attention.
-
-3.1 Handling X11 specific Source Code
--------------------------------------
-
-If an FLTK 1.4 application contains X11-specific code, execution of this code
-in the context of an active Wayland session can produce malfunctions or program crashes.
-To ensure that X11-specific code gets called only when an X11 connection is active,
-check that function fl_x11_display() returns non-NULL before using any X11-specific
-function or variable.
-
-3.2 Handling X11 and Wayland Specific Source Code in the Same App
------------------------------------------------------------------
-
-The recommended way to prepare and use platform-specific code that would contain
-X11-specific and possibly Wayland-specific parts is as follows :
-
-a) Organize platform-specific code as follows¹:
-
- #include <FL/platform.H>
-
- #ifdef __APPLE__
- *** macOS-specific code ***
- #elif defined(_WIN32)
- *** Windows-specific code ***
- #else
- # ifdef FLTK_USE_X11
- *** X11-specific code ***
- # endif
- # ifdef FLTK_USE_WAYLAND
- *** Wayland-specific code ***
- # endif
- #endif
-
-b) Make sure to use distinct names for global variables and functions
-in the X11- and the Wayland-specific sections.
-
-c) Check that function fl_x11_display() returns non-NULL before using any X11-specific
-function or variable, and that fl_wl_display() returns non-NULL before using any
-Wayland-specific function or variable. Make sure that fl_open_display() was called
-directly or indirectly before using any such symbol.
-
-¹ To be also compatible with macOS+XQuartz, a slightly different organization is necessary:
- #include <FL/platform.H>
- #if defined(FLTK_USE_X11) || defined(FLTK_USE_WAYLAND)
- # ifdef FLTK_USE_X11
- *** X11-specific code which can run under Linux/Unix or under macOS+XQuartz ***
- # endif
- # ifdef FLTK_USE_WAYLAND
- *** Wayland-specific code ***
- # endif
- #elif defined(__APPLE__)
- *** macOS-specific code which doesn't run under XQuartz ***
- #elif defined(_WIN32)
- *** Windows-specific code ***
- #endif
-
-3.3 Forcing an FLTK App to Always Use the X11 Backend
------------------------------------------------------
-
-Alternatively, it is possible to force a program linked to a Wayland-enabled
-FLTK library to use X11 in all situations by putting this declaration somewhere
-in the source code :
- FL_EXPORT bool fl_disable_wayland = true;
-FLTK source code and also X11-specific source code conceived for FLTK 1.3
-should run with a Wayland-enabled, FLTK 1.4 library with that single change only.
-
-
-4 Platform Specific Notes
+3 Platform Specific Notes
=========================
The following are notes about building FLTK for the Wayland platform
on the various supported Linux distributions/OS.
-4.1 Debian and Derivatives (like Ubuntu, RaspberryPiOS)
+3.1 Debian and Derivatives (like Ubuntu, RaspberryPiOS)
-------------------------------------------------------
Under Debian, the Wayland platform requires version 11 (a.k.a. Bullseye) or more recent.
@@ -216,7 +143,7 @@ These packages allow to run FLTK apps under the KDE/Plasma-Wayland desktop:
Package installation command: sudo apt-get install <package-name ...>
-4.2 Fedora
+3.2 Fedora
----------
The Wayland platform is known to work with Fedora version 35.
@@ -239,12 +166,12 @@ package groups listed in section 2.2 of file README.Unix.txt :
Package installation command: sudo yum install <package-name ...>
-4.3 FreeBSD
+3.3 FreeBSD
-----------
-The Wayland platform is known to work with FreeBSD version 13.1 and the sway compositor.
+The Wayland platform is known to work with FreeBSD version 13.1 and the Sway compositor.
-These packages are necessary to build the FLTK library and the sway compositor:
+These packages are necessary to build the FLTK library and use the Sway compositor:
git autoconf pkgconf xorg urwfonts gnome glew seatd sway dmenu-wayland dmenu evdev-proto
Package installation command: sudo pkg install <package-name ...>
diff --git a/documentation/src/osissues.dox b/documentation/src/osissues.dox
index cc2b4f195..fe25ca2b4 100644
--- a/documentation/src/osissues.dox
+++ b/documentation/src/osissues.dox
@@ -4,6 +4,7 @@
This appendix describes the operating system specific interfaces in FLTK:
\li \ref osissues_accessing
+\li \ref osissues_wl_x11_hybrid
\li \ref osissues_unix
\li \ref osissues_win32
\li \ref osissues_macos
@@ -44,8 +45,40 @@ operating system.
</TABLE>
</CENTER>
+\section osissues_wl_x11_hybrid The Wayland/X11 hybrid library
+
+By default, the FLTK library is, under Linux and Unix, a Wayland/X11 hybrid which
+can run FLTK-based apps as Wayland clients or as X11 clients.
+The choice between running an app as a Wayland or an X11 client is done as follows,
+when the app runs function \c fl_open_display() (that function can be called explicitly by the app
+or implicitly by FLTK, for example the first time an Fl_Window is show()'n) :
+- if environment variable FLTK_BACKEND is not defined, Wayland is used if a Wayland compositor
+ is available, otherwise X11 is used;
+- if $FLTK_BACKEND equals "wayland", the library makes the app a Wayland client, and stops
+ with error if no Wayland compositor is available;
+- if $FLTK_BACKEND equals "x11", the library makes the app an X11 client even if a Wayland
+ compositor is available.
+
+After function \c fl_open_display() has been called, exactly one of the functions \c fl_wl_display()
+and \c fl_x11_display() returns a non-NULL value.
+When the former function does, the app runs as a Wayland client,
+and Wayland-specific functions and symbols described below (\ref osissues_wayland) can be used, whereas
+X11-specific functions and symbols cannot. Otherwise, the app runs as an X11 client, and only
+X11-specific functions and symbols below (\ref osissues_unix) can be used.
+
+Because a single app can be expected to run either Wayland or X11, it's necessary to use distinct
+names for global variables and functions in the X11- and the Wayland-specific source code.
+
+Non-default configurations of the FLTK library under Linux/Unix are described in
+file README.Wayland.txt.
+
\section osissues_unix The UNIX (X11) Interface
+Cross-platform applications should bracket X11-specific source code between
+<tt>\#if defined(FLTK_USE_X11) / \#endif</tt> and should ensure function
+\c fl_x11_display() returns non-NULL before calling X11-specific functions and using
+X11-specific symbols.
+
The UNIX interface provides access to the X Window System
state information and data structures.
@@ -494,6 +527,9 @@ what is done by the gnome and KDE desktops.
\section osissues_win32 The Windows Interface
+Cross-platform applications should bracket Windows-specific source code between
+<tt>\#ifdef _WIN32 / \#endif</tt>.
+
The Windows interface provides access to the Windows GDI
state information and data structures.
@@ -712,6 +748,9 @@ version of FLTK:
\section osissues_macos The Apple OS X Interface
+Cross-platform applications should bracket macOS-specific source code between
+<tt>\#if defined(\_\_APPLE\_\_) && !defined(FLTK_USE_X11) / \#endif</tt>.
+
FLTK supports Apple OS X using the Apple Cocoa library. Older
versions of MacOS are no longer supported.
@@ -948,8 +987,10 @@ FLTK uses UTF-8-encoded UNIX-style filenames and paths.
\section osissues_wayland The Wayland Interface
-See file README.Wayland.txt for details about how to organize platform-specific
-source code for the Wayland platform.
+Cross-platform applications should bracket Wayland-specific source code between
+<tt>\#ifdef FLTK_USE_WAYLAND / \#endif</tt> and should ensure function
+\c fl_wl_display() returns non-NULL before calling Wayland-specific functions and using
+Wayland-specific symbols.
extern struct wl_display *fl_wl_display();
\par