Bug 4031 - Client UI looks old
Summary: Client UI looks old
Status: NEW
Alias: None
Product: ThinLinc
Classification: Unclassified
Component: Client platforms (show other bugs)
Version: 3.1.2
Hardware: PC All
: P2 Enhancement
Target Milestone: MediumPrio
Assignee: Peter Åstrand
Keywords: fltk
Depends on:
Reported: 2011-10-21 10:05 CEST by Pierre Ossman
Modified: 2022-07-14 12:45 CEST (History)
1 user (show)

See Also:
Acceptance Criteria:


Description Pierre Ossman cendio 2011-10-21 10:05:54 CEST
It would be nice if tlclient and vncviewer could look more like native apps. Properly using native toolkits is not feasible with our current development resources, but maybe we can make FLTK use native drawing APIs to make the widgets look native? On Unix we could dlopen() GDK and/or Qt to make them optional requirements.
Comment 1 Pierre Ossman cendio 2014-08-19 13:01:13 CEST
Another option is considering a switch to Qt. A lot has happened since last we looked at it. And it is fully capable of mimicing the native system look:


Downside is mainly that the client will most likely be much larger on disk.
Comment 2 Pierre Ossman cendio 2015-03-19 11:30:09 CET
Note that Qt5 has dropped support for Solaris. It also seems to target xcb, which could be another issue on Solaris, and older terminals.
Comment 3 Pierre Ossman cendio 2015-03-20 14:55:58 CET
Qt doesn't seem to have improved much in the way of staying lean either. A statically linked Hello World is 15 MiB when stripped. The link line is also very frightening:

cbrun x86_64 g++ -nodefaultlibs -fPIE -o foo foo.cc -I/usr/include/QtWidgets -I/usr/include/QtGui -I/usr/include/QtCore -Wl,-Bstatic /usr/lib64/qt5/plugins/platforms/libqxcb.a -lQt5PlatformSupport -lQt5Widgets -lQt5Gui -lQt5Core  -lglib-2.0 -lpcre16 -ljpeg -lpng -lxcb-shape -lxcb-randr -lxcb-xfixes -lxcb-shm -lxcb-sync -lxcb-xkb -lxcb-image -lxcb-icccm -lxcb-keysyms -lxcb-util -lxkbcommon -lxkbcommon-x11 -lXi -lXext -lfontconfig -lfreetype -lexpat -lbz2 -lstdc++ -Wl,-Bdynamic -lxcb -lX11-xcb -lX11 -lz -ldl -lrt -lm -lc -lgcc_eh -lgcc

If I'm being generous and only statically link Qt, then it's still 13 MiB when stripped. Link line is also still pretty verbose:

cbrun x86_64 g++  -fPIE -o foo foo.cc -I/usr/include/QtWidgets -I/usr/include/QtGui -I/usr/include/QtCore -Wl,-Bstatic /usr/lib64/qt5/plugins/platforms/libqxcb.a -lQt5PlatformSupport -lQt5Widgets -lQt5Gui -lQt5Core -Wl,-Bdynamic -lglib-2.0 -lfontconfig -lfreetype -lpcre16 -ljpeg -lpng -lxcb -lxcb-xfixes -lxcb-sync -lxcb-randr -lxcb-shape -lxcb-shm -lxcb-xkb -lxcb-image -lxcb-icccm -lxcb-keysyms  -lxkbcommon -lxkbcommon-x11 -lXi -lX11-xcb -lX11 -lz -ldl

For comparison, our current tlclient.bin and vncviewer are about 2.5 MiB each.
Comment 4 Pierre Ossman cendio 2015-03-20 14:56:46 CET
(In reply to comment #1)
> Another option is considering a switch to Qt. A lot has happened since last we
> looked at it. And it is fully capable of mimicing the native system look:
> http://qt.digia.com/PageFiles/2476/qquick_controls1.png

This link seems to have gone stale. Something more current:

Comment 5 Pierre Ossman cendio 2015-06-16 16:32:35 CEST
LTO might be a solution to the large size. Hopefully it can deduce that most of Qt is unused and strip it from the binaries.
Comment 6 Pierre Ossman cendio 2016-02-11 12:10:43 CET
Unfortunately LTO did not magically solve everything. It reduced a rather sizeable 5 MiB of the binary, but that's still leaves us with a much larger binary than today.
Comment 7 Pierre Ossman cendio 2017-01-23 14:32:47 CET
Apparently Qt has been working on being able to configure out more of the library, reducing size:


"As you can see, the new configuration system allows for significant reductions in size and savings of more than 60% in binary size compared to Qt 5.6."
Comment 8 Pierre Ossman cendio 2019-01-24 11:16:27 CET
Qt has a wiki about statically linking the library:


I have not tested the suggestions there though.
Comment 11 Pierre Ossman cendio 2022-01-15 13:57:23 CET
Apparently you can abuse FLTK quite a bit and get somewhat better looks:


The above is rust, but it is based on C++ implementations, which are linked in the above project.
Comment 12 Pierre Ossman cendio 2022-07-13 10:21:02 CEST
I'm not sure "native" is a worthwhile goal any more. Things have got very fuzzy over the years of what "native look" means:

 * The web is the primary application for many users, where there is no common look

 * Many major applications, such as Chrome and Firefox, use their own toolkit which does not match the local system

 * Linux has always had a myriad of toolkits which look very different

 * Windows is now a mess of various toolkits, with even Microsoft themselves unable to consistently apply a single look across their applications

The only platform that is somewhat consistent in its appearance is macOS. But it also still has the issues with the web browsers and the web.

So a more current goal is probably that the client shouldn't look dated, and follow popular current styles.
Comment 13 Pierre Ossman cendio 2022-07-13 10:22:23 CEST
Some upstream work in making things look a bit more current:


Note You need to log in before you can comment on or make changes to this bug.