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.
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.
Note that Qt5 has dropped support for Solaris. It also seems to target xcb, which could be another issue on Solaris, and older terminals.
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.
(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:
This link seems to have gone stale. Something more current:
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.
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.
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."
Qt has a wiki about statically linking the library:
I have not tested the suggestions there though.
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.
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.
Some upstream work in making things look a bit more current: