Horrible GTK3 / GNOME UI design is leaking into Ubuntu Mate applications in 20.04

I do not think it was discussed (at least publicly). I was saying that as contrast to the removal of the scrollbar steppers, so that nobody got scared that scrollbars themselves might be gone too.

About GTK 4, here comes my appraisal:

GTK 4: What's New, What's Improved and What's Worse

For this test I used GTK 3.99.0, which is still the latest development-quality (i.e., beta-testing) release of GTK 4. I performed the test on Gentoo on 32- and 64-bit Intel-architecture PCs. I was hoping GTK 4 could work (even if a mite slowly) on 32-bit systems, too.

Prerequisites

To give you an idea of how new of software you need to use GTK 4, some of the dependencies are not yet even in the Gentoo repository. And Gentoo is not known to be conservative like Debian. Among the dependencies you might need to install are GLib (2.64 or later), Pango (1.45 or later), SassC (a CSS compiler), and Graphene.

Let me also tell you that I have no faith in the proper functioning of any of these components, including GTK 4 itself (it's a development version, for crying out loud), so I decided to install all of this software under an unusual installation prefix: /opt/gtk4. That way there would be no conflicts.

All libraries and GTK 4 itself compiled and installed cleanly into /opt/gtk4, which I was impressed by. There were compiler warnings, but none of them seemed especially meaningful to me (and I've actually perused the code for these libraries before). I had high hopes at this point.

After compiling on the 32-bit system, I ran the 32-bit version and was disappointed by the fact that the GTK demo application crashed before it even finished drawing the main window. It crashed with a segmentation fault. After hunting around for what might have caused this error, I discovered that the segmentation fault was caused not by an illegal memory access (like most segfaults are), but by a "general protection error". What does that mean? I dusted off an old book of mine about the i386 architecture and discovered that it means a lot of things, but one of the meanings of that fault is that an SSE (advanced high-speed floating-point) instruction was executed with memory "misaligned". When a variable is misaligned in memory, it means that the address of the variable is not evenly divisible by some set power of 2; in my case, the variable's address was not evenly divisible by 16 bytes, because the variable was packed into a structure with several other variables. I ran the 64-bit version of GTK 4 I had just compiled and that version ran fine, leading me to believe that the alignment problem was an issue only on a 32-bit system. (Take that information any way you want to take it.)

Anyway, the rest of the appraisal is for the 64-bit version; I eventually made the 32-bit version partly work, but it would crash sporadically from the same alignment issue anyway, if you continued running the application for more than about 20-60 seconds.

One thing I'll note is that GTK 4 is very obviously intended for Wayland and not so much for X11. It seems the X11 backend has suffered from code rot in multiple places, but one of the myriad places where the code rot appears is a 20-odd pixel gray border that surrounds all windows except for menus. I'll get back to that shortly. But for right now, allow me to apologize for the mediocre screenshots under X11, because it seems GTK 4 applications do not play well with my screenshooter.

Anyway, I tried the demo application under Wayland and X11. The first thing I noticed under both backends was the toolbar buttons did not look like toolbar buttons:

They look like buttons, not toolbar buttons. Toolbar buttons should not be slick on the outside unless your theme actually dictates that. (By the way, the Wayland screenshots always come first, and the X11 shots always come second.) But one thing I remembered is that this was caused by the removal of the dedicated GtkToolbar widget (like I previously outlined and @mrtribute was kind enough to copy into this thread way above). I remembered that the solution suggested by the GTK team themselves was to apply a "toolbar style class" to the section of the user interface with toolbar buttons. I did so myself, and voila! the toolbar buttons looked like toolbar buttons. I hope this is ironed out, because the GTK demo applications are where many developers look to for examples when a new feature is added to GTK.

And you may have noticed that the border does not surround headerbar-less windows, either.

But I'd like to bring your attention to a bad case of hipocrisy, and undefendable hipocrisy to boot: the menus and menu bars. No wait, they're not menus, they're "popover menus"; menus are unwidgets, in George Orwell's terminology, forgotten to the history of GTK, lost down the memory hole apparently. So about these popover menus: As you can see above, obviously menus (sorry, popover menus -- two counts of thoughtcrime there) still exist, but in a rather bastardized form -- now the menus are physically bigger and a lot stupider-looking:

What you unfortunately can't see is that the exact "override-redirect windows" in use by menus (yikes, strike three on thoughtcrime!) are also used by popover menus. I bring this up because "override-redirect windows" were exactly the X11-centric concepts the GTK team were criticizing in the piece I quoted from them above! It's crazy!

And then the popover menus are still kind of flaky right now, with the possibility to select multiple options at once (and no, it's obviously not intended):

But that aside, I also note that the dialogs look (in my opinion) like trash now. And that's not configurable by the theme (I checked the code), and all dialogs are going to be like that unless you attach a dreaded headerbar to them:

Are there any good points to GTK 4? Yes. Now that GTK uses OpenGL for rendering, the speed of the user interface has improved. Now you can scroll up and down a page of text cleanly. But skeptics would argue that they're doing with the GPU what GTK used to do with the CPU just fine.

And the scrollbar steppers: I checked the code up and down and found no evidence that the scrollbar steppers still exist. Dang it, I just committed thoughtcrime again; I mentioned an unwidget, actually two!

I hope that was an informative guide. It at least powered me up to continue STLWRT before it's too late.

Next time: An even deeper review of the future ahead of us...

6 Likes