GTK3-classic/GTK3-mushrooms — GTK3 with my own patches




I’m user of Manjaro and Arch Linux. I prefer GTK-based desktop environments other than GNOME. I like GTK but I was disappointed because of GTK “gnomization”. So I created “gtk3-mushrooms”, GTK3 package for Arch Linux (but it works with Manjaro) with my own patches. I changed small things like context menu icons, file chooser appearance and behavior, ability to disable CSDs and others to make GTK better for me and for users of classic GTK-based environments like MATE and XFCE.

Please see screenshots and test my package. What do you think about it? :slight_smile:

More information:

Compiled releases:
AUR package:

[unstable] gtk3-classic and gtk3 are in conflict. Remove gtk3?
Pamac 6.0.1-1, system wide settings for close, min & max buttons not considered
The New Pamac! Nice Job!
[DISCONTINUED] Special Manjaro XFCnome Spin! (XFCnome = Xfce + Gnome Apps)
Window-manager style customization coherence
How to disable scroll bar changing size in app windows on Manjaro XFCE?
Can't start redshift-gtk: Failed to load shared library ''
Pamac shows GTK client side decoration
Gtk3 PDF readers don't show the printer
Title bars - Pamac, Chromium etc. inconsistent

Very nice. Disabling client side decorations (to use the normal header bar) is a big improvement, and well implemented. Looks good for me with the Adapta theme. Much appreciated!

And I like how you separated your patches. It’s pretty easy to rebuild with just some of the patches, if desired (I kinda like the hiding scrollbars…)


Like it.

Question about the package size:

$ sudo pacman -U gtk3-mushrooms-3.22.19-2-x86_64.pkg.tar.xz 
loading packages...
resolving dependencies...
looking for conflicting packages...
:: gtk3-mushrooms and gtk3 are in conflict. Remove gtk3? [y/N] y

Packages (2) gtk3-3.22.19-2 [removal]  gtk3-mushrooms-3.22.19-2

Total Installed Size:   27.12 MiB
Net Upgrade Size:      -42.53 MiB

:: Proceed with installation? [Y/n]

Have you left something out purposefully, or is CSD just really bloated? :slight_smile:

(There must be a better place for this… it’s definitely not #off-topic.)


Very nice. Disabling client side decorations (to use the normal header bar) is a big improvement, and well implemented. Looks good for me with the Adapta theme. Much appreciated!

You can enable CSDs by GTK_CSD environment variable. When GTK_CSD=1 each GTK3 window will be decorated client-side, no by window manager, and shadows of windows, menus and tooltips will be drawn client-side (it’s default GTK behavior with GTK_CSD=1).

My patch also includes an “itermediate” mode. If you set GTK_CSD=0 environment variable, windows borders and titlebars from CSD will be enabled but window shadows will be rendered server-side, by window manager. This mode solves problems with window positioning and context menus in incompatible window managers such as Marco (in MATE). However this mode could cause other problem. If your theme do not specify borders for windows, in GTK_CSD=0 mode you will be not able to resize windows! In this case you must add this code: decoration { border: 3px solid #000; } to your ~/.config/gtk-3.0/gtk.css.

And I like how you separated your patches. It’s pretty easy to rebuild with just some of the patches

(There must be a better place for this… it’s definitely not #off-topic.)

@jonathon, @cimarronline — thank you. :wink:

(I kinda like the hiding scrollbars…)

I will correct this in the future and GTK_OVERLAY_SCROLLING will be disabled but with ability to enable it.

Have you left something out purposefully, or is CSD just really bloated?

As I wrote, it is possible to enable CSDs with my patch. To disable CSDs (correctly: to add ability to disable this feature) you must change one line (!!!) in GTK code. See:

My package is smaller than original “gtk3” package because my package is compiled without tests, documentation, code examples and example applications (I kept only gtk3-widget-factory).


I updated package to new GTK version.


Thanks, I’ll try it. Wow, you’re even ahead of Arch…

EDIT: Builds and works great.


Looks very promising, compiling now. Thanks a lot!


I published new version of my package. It’s based on gtk 3.22.21.

  • @cimarronline, currently you can enable invisible scrollbars with my patch. Just use GTK_OVERLAY_SCROLLING=1 environment variable.
  • I added patch (based on information from GNOME’s bugzilla) that fixes black background of all GTK windows during rendering. (It’s visible in XFWM for example.)


Works nicely. Now I don’t have to build it myself (without the scrollbars patch). Thanks!


Is also a lib32-gtk3 planned, or even needed?


I don’t use 32-bit hardware and I won’t maintain 32-bit version of gtk3-mushrooms. You can try to compile it yourself using PKGBUILD of my package and PKGBUILD of lib32-gtk3 from multilib.


I built gtk3-mushrooms on my 32-bit machine and it runs fine.

It looks like lib32-gtk3 is not a dependency of much, mostly just for compiling other packages ( I don’t even have it installed on my 64-bit laptop.


Totally impressive, great job @TomaszGasior ! :smile:
Fun using it in i3 where you can finally get rid of those annoying window decorations of gedit :laughing:

Will test in Xfce and Cinnamon next … :slight_smile:


@oberon: we may distribute it as gtk3-classic and do a lib32 version of it too.


Let’s do that! Totally nice the consistancy of window decorations in xfce-gtk3!
gedit - pamac - thunar-gtk3:


@TomaszGasior what’s the deal with “mushrooms”?? :wink:


Because the GTK developers keep people in the dark and feed them bullsh1t? :rofl:



I also LOVE the changes you have made for the file-chooser! All those things have been annoying me, too.

  • Annoying single-click “feature” in file list is disabled. You always have to double-click to choose file from list. See
  • Typeahead feature is restored. Recursive file search will not be ran automatically when you start typing. You can still search recursively by Left Alt + S shortcut. See
  • Current working directory is opened by default instead of section with recently used files.
  • “Other locations” button is removed from places sidebar. All mounted devices and drives are accessible directly.
  • File system button in places sidebar is labeled as “File System” instead of “Computer”.
  • Trash and XDG user directories (like Pictures, Downloads, Documents) are removed from places sidebar. They can be added as bookmarks.


@philm, @oberon and others — I’m very happy that my small project is useful for you. :wink:

@xircon, I have respect for GNOME/GTK developers. Sometimes they are doing something wrong but they are working a lot for GTK-based environments. GTK is not ideal but I like it. It’s power of open source, when something is not ideal you can correct it.
@oberon. Reason of “gtk3-mushrooms” name is strange. I created it only for fun (initially only for myself) and name was not important for me. “mushroom” was my pseudonym in school — so it’s a kind of joke. :wink:

@philm, @oberon — you can use my patches if you want, it’s open source. But it seems to me that some facts are important.

  • Patches that I created can be divided to three groups:
    – Things that can’t be fixed without patching ant they are important. Examples: disabling CSDs, typeahead in file chooser.
    – Things that are not important and can’t be changed without patching. Examples: appearance of print dialog, delay before showing mnemonics, label of “Computer” button in file choosers’s places sidebar.
    – Things that can be changed without patching but I change it to get more consistent desktop in MATE/XFCE (which I use). Examples: Adwaita custom stylesheet, colorized icons in file chooser, disabled GTK_OVERLAY_SCROLLING by default.
    When Manjaro team want to use my patches in alternative “gtk3” package, some things should be considered. For example “fixes__no-at-bridge” patch makes Orca reader broken and take away disabled users ability to use screen reader without special environment variable. Should it be included? Other thread is that should “gtk3-classic” package have patches that change things that can be changed without patches? (Sorry for my English if it is hard to understand.)

  • In the future (in 2018?) I will move from Manjaro completely to Arch Linux. Currently I use both. Manjaro is partially compatible with Arch (expect kernel packages) so it is not big issue. But I do not respect Manjaro releases plans and state of “gtk3” package in your repository. I create new version of my pkg, when I get notification from RSS reader (RSS feed of GNOME’s mirror in GitHub).
    Someone from Manjaro team should build “gtk3-classic” with proper version matching to “gtk3” version in Manjaro repository. It is not hard to do, because currently GTK3 is in frozen state and code upstream changes are small.

  • I am not C programmer. I am webmaster. I didn’t wrote line in C or GTK code. :wink: I hope there is someone in Manjaro team with better C and GTK experience, who can correct my patches quality for Manjaro users stability and secure.