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.