Compatibility problems with latest GTK+ applications

Martin Gräßlin mgraesslin at kde.org
Wed May 7 09:11:37 BST 2014


Hi all,

I need some advice. The new GTK+ release introduced and enforces client-side-
decorations (CSD) and that is causing severe compatibility problems with 
Plasma Workspaces (especially the stable release which we cannot adjust any 
more). I'll give a list of issues below.

I'm not sure what we can do about it. I think we need to do something about 
it, because this looks like a road back to "GTK apps can only be used in GNOME 
Shell" resulting in "KDE apps can only be used in Plasma". Because of that I 
think the compatibility problems matters to everyone also our application 
developers. I think the right thing is to contact the GTK+ developers and 
point out the problems, but I am probably the wrong person for it as I'm a 
known opponent of CSD and fear that my feedback would be ignored. As a 
fallback strategy we could enforce server-side-decorations (SSD) for all GTK+ 
applications which would look strange [4] but at least no loss in 
functionality.

Of course there are things we can do in KWin to improve compatibility, but 
4.11 is feature frozen and these would require new code and we have certainly 
more important things to do than to fix client breakage (we don't do that in 
general).

It would be way easier if GTK+ would detect whether the environment supports 
CSD and use a normal application design if that's not supported. This would 
not only be relevant for us, but especially for tiling window managers.

List of issues I noticed:
* A hung window can no longer be closed or moved. Technical explanation: there 
is a ping protocol to detect hung applications. KWin only sends ping requests 
when the window is being closed from the window manager (e.g. decoration close 
button or Alt+F4).
* quick tiling broken, see [1]. It includes the shadow in calculation.
* black shadows around window if compositing gets disabled after the window 
got opened [2]. Technical explanation: GTK+ doesn't detect that compositing 
gets enabled/disabled. Other direction is broken, too.
* double borders if window gets opened when compositing is disabled [3]. 
Technical explanation: GTK+ uses the Motif Window Manager Hints to tell how 
the decoration should look like. KWin is not the Motif Window Manager and does 
not fully support the hints. Fun fact our code has a comment that we follow 
Metacity to only support those hints which are not stupid.
* double border if decorations on KWin side are enforced [4] (Alt+F3 -> More 
Actions -> No Border). Technical explanation: GTK+ doesn't detect the re-
parenting and doesn't hide it's own deco and shadow
* Wrong resize cursor is shown on edges [6]
* Windows don't have a maximize and minimize button although configured in the 
decoration settings
* Incorrect drag delay: KWin uses either a drag delay on distance or on time 
for starting move or resize. GTK+ only has a drag delay on distance for moving 
and none for resizing. That's an important accessibility feature to have that 
globally configurable
* Windows can no longer be shaded
* Windows can no longer be put into window tabs
* Dialogs don't have a close button [5] (unless run without compositing)
* Ignores the configured mouse actions, uses (hard coded?) actions. Defaulting 
to lower window on middle click while we use window tab drag on middle click
* no visual distinction between active and inactive application
* Broken window snapping: window snaps to shadow [7]
* Mismatching application window menu [8]. Note our menu could be invoked 
through DBus. I consider this as a big problem as that's the only way to e.g. 
add windows to activities (which is also broken now) or to access the advanced 
window manager features GNOME doesn't know of.

That list I figured out in less than 10 min usage of a new GTK+ application. I 
assume and fear that the list is much longer.

Any advice on how to handle this situation is appreciated.

Cheers
Martin

[1] 
https://picasaweb.google.com/lh/photo/_q8BS4WN91ZvjEGSsiUkqtMTjNZETYmyPJy0liipFm0?feat=directlink
[2] 
https://picasaweb.google.com/lh/photo/hGjW0RLjGF3UVw5wFnPMqdMTjNZETYmyPJy0liipFm0?feat=directlink
[3] 
https://picasaweb.google.com/lh/photo/hriAb8OI1Yh8BtxtAg5bG9MTjNZETYmyPJy0liipFm0?feat=directlink
[4] https://picasaweb.google.com/lh/photo/9LLTICdSJhcHl-SCBWc_i9MTjNZETYmyPJy0liipFm0?feat=directlink
[5] https://picasaweb.google.com/lh/photo/-krx0xvGFjq9TwkEC4Bh_tMTjNZETYmyPJy0liipFm0?feat=directlink
[6] https://picasaweb.google.com/lh/photo/BfuvOcm0_v_BG-SkoxXJ29MTjNZETYmyPJy0liipFm0?feat=directlink
[7] 
https://picasaweb.google.com/lh/photo/Vya50RqaVq1ij6sMDHEnbdMTjNZETYmyPJy0liipFm0?feat=directlink
[8] https://picasaweb.google.com/lh/photo/2Xa5xNqDmjGL-bXwFzmPWdMTjNZETYmyPJy0liipFm0?feat=directlink
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 198 bytes
Desc: This is a digitally signed message part.
URL: <http://mail.kde.org/pipermail/kde-core-devel/attachments/20140507/7c4485a9/attachment.sig>


More information about the kde-core-devel mailing list