osissues.dox: add "The Wayland/X11 hybrid library"
This commit is contained in:
parent
8178d95eb6
commit
1a8d6662ce
@ -11,15 +11,10 @@ Contents
|
|||||||
2.1 Configuration
|
2.1 Configuration
|
||||||
2.2 Known Limitations
|
2.2 Known Limitations
|
||||||
|
|
||||||
3 Preparing Platform Specific Code for the Wayland Platform
|
3 Platform Specific Notes
|
||||||
3.1 Handling X11 specific Source Code
|
3.1 Debian and Derivatives (like Ubuntu)
|
||||||
3.2 Handling X11 and Wayland Specific Source Code in the Same App
|
3.2 Fedora
|
||||||
3.3 Forcing an FLTK App to Always Use the X11 Backend
|
3.3 FreeBSD
|
||||||
|
|
||||||
4 Platform Specific Notes
|
|
||||||
4.1 Debian and Derivatives (like Ubuntu)
|
|
||||||
4.2 Fedora
|
|
||||||
4.3 FreeBSD
|
|
||||||
|
|
||||||
|
|
||||||
1 Introduction
|
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.
|
run unchanged with FLTK 1.4 and the Wayland platform.
|
||||||
The code has been tested on Debian, Ubuntu, RaspberryPiOS and Fedora with
|
The code has been tested on Debian, Ubuntu, RaspberryPiOS and Fedora with
|
||||||
3 distinct Wayland compositors: mutter (Gnome's compositor), weston, and KDE.
|
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.
|
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;
|
compositor is available;
|
||||||
- if $FLTK_BACKEND has another value, the library stops with error.
|
- 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
|
On pure Wayland systems without the X11 headers and libraries, FLTK can be built
|
||||||
with its Wayland backend only (see below).
|
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
|
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,
|
hybrid library. On systems lacking all or part of Wayland-required packages,
|
||||||
the default building procedure produces a X11-based library.
|
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.
|
although it works inside X11 windows on the same hardware.
|
||||||
|
|
||||||
|
|
||||||
3 Preparing Platform Specific Code for the Wayland Platform
|
3 Platform Specific Notes
|
||||||
===========================================================
|
|
||||||
|
|
||||||
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
|
|
||||||
=========================
|
=========================
|
||||||
|
|
||||||
The following are notes about building FLTK for the Wayland platform
|
The following are notes about building FLTK for the Wayland platform
|
||||||
on the various supported Linux distributions/OS.
|
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.
|
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 ...>
|
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.
|
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 ...>
|
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
|
git autoconf pkgconf xorg urwfonts gnome glew seatd sway dmenu-wayland dmenu evdev-proto
|
||||||
|
|
||||||
Package installation command: sudo pkg install <package-name ...>
|
Package installation command: sudo pkg install <package-name ...>
|
||||||
|
@ -4,6 +4,7 @@
|
|||||||
|
|
||||||
This appendix describes the operating system specific interfaces in FLTK:
|
This appendix describes the operating system specific interfaces in FLTK:
|
||||||
\li \ref osissues_accessing
|
\li \ref osissues_accessing
|
||||||
|
\li \ref osissues_wl_x11_hybrid
|
||||||
\li \ref osissues_unix
|
\li \ref osissues_unix
|
||||||
\li \ref osissues_win32
|
\li \ref osissues_win32
|
||||||
\li \ref osissues_macos
|
\li \ref osissues_macos
|
||||||
@ -44,8 +45,40 @@ operating system.
|
|||||||
</TABLE>
|
</TABLE>
|
||||||
</CENTER>
|
</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
|
\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
|
The UNIX interface provides access to the X Window System
|
||||||
state information and data structures.
|
state information and data structures.
|
||||||
|
|
||||||
@ -494,6 +527,9 @@ what is done by the gnome and KDE desktops.
|
|||||||
|
|
||||||
\section osissues_win32 The Windows Interface
|
\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
|
The Windows interface provides access to the Windows GDI
|
||||||
state information and data structures.
|
state information and data structures.
|
||||||
|
|
||||||
@ -712,6 +748,9 @@ version of FLTK:
|
|||||||
|
|
||||||
\section osissues_macos The Apple OS X Interface
|
\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
|
FLTK supports Apple OS X using the Apple Cocoa library. Older
|
||||||
versions of MacOS are no longer supported.
|
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
|
\section osissues_wayland The Wayland Interface
|
||||||
|
|
||||||
See file README.Wayland.txt for details about how to organize platform-specific
|
Cross-platform applications should bracket Wayland-specific source code between
|
||||||
source code for the Wayland platform.
|
<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();
|
extern struct wl_display *fl_wl_display();
|
||||||
\par
|
\par
|
||||||
|
Loading…
Reference in New Issue
Block a user