Zotero Preferences Window Issue with Tiling Window Managers
I'm using the Zotero desktop application version 5.0.84 on GNU/Linux with a tiling window manager. My tiling window manager resizes Zotero's preferences window to its current layout, but it seems that the preferences window wasn't designed to work at any other than its default size. Using the resized preferences window results in rather unpleasant display artefacts.
There are two ways to resolve the issue. One way is to fix the preferences window to support resizing. The other (much simpler) solution is for the preferences window to set the appropriate window type such that tiling window managers treat the window as a floating window and don't attempt to resize it. Other Zotero windows in fact already do this, for example the "Help -> Report Errors..." window or the "Help -> About Zotero" window.
The window types are documented here:
https://specifications.freedesktop.org/wm-spec/latest/ar01s05.html#idm46094431857712
The preferences window sets its _NET_WM_WINDOW_TYPE to _NET_WM_WINDOW_TYPE_NORMAL, but it should set to _NET_WM_WINDOW_TYPE_DIALOG like the "Repor Errors..." and "About Zotero" windows do. I'm pretty sure that mainstream GUI toolkits such as GTK and Qt offer simple means to specify whether the opened window is "normal" or if it's a dialog window. So fixing the issue should be a matter of giving the preferences window the appropriate window type.
There are two ways to resolve the issue. One way is to fix the preferences window to support resizing. The other (much simpler) solution is for the preferences window to set the appropriate window type such that tiling window managers treat the window as a floating window and don't attempt to resize it. Other Zotero windows in fact already do this, for example the "Help -> Report Errors..." window or the "Help -> About Zotero" window.
The window types are documented here:
https://specifications.freedesktop.org/wm-spec/latest/ar01s05.html#idm46094431857712
The preferences window sets its _NET_WM_WINDOW_TYPE to _NET_WM_WINDOW_TYPE_NORMAL, but it should set to _NET_WM_WINDOW_TYPE_DIALOG like the "Repor Errors..." and "About Zotero" windows do. I'm pretty sure that mainstream GUI toolkits such as GTK and Qt offer simple means to specify whether the opened window is "normal" or if it's a dialog window. So fixing the issue should be a matter of giving the preferences window the appropriate window type.
The preferences will be a resizable HTML window in a future version, so this will likely be fixed at that point.
I still suspect that the preferences window is currently being opened in a slightly different way than it should though. Let me remind that many other Zotero dialog windows set _NET_WM_WINDOW_TYPE_DIALOG and are handled correctly by my tiling window manager, for example:
File -> New Collection...
File -> Import...
File -> Export Library...
Tools -> Addons
Help -> Report Errors
Help -> About Zotero
Examples of windows that instead set _NET_WM_WINDOW_TYPE_NORMAL are (apart from the preferences window):
Help -> Check for Updates...
Advanced Search
All that is needed is for the preferences window to be opened 'in the same way' as the first list of windows. I've looked at the code you linked, I've searched a bit through Zotero's source code on Github and it seems that this could be related to the preferences window setting the 'dialog=no' window feature. Could this be the culprit? Going through XUL's documentation didn't really make it clear to me what the 'dialog' window feature does exactly. Please note that searching zotero/zotero on Github for 'dialog=yes' yields code of some of the windows that set _NET_WM_WINDOW_TYPE_DIALOG (about.xul and importWizard.xul) whilst searching for 'dialog=no' returns the Advanced Search window.
Some details here. Going by resizability and minimizability, I'd say, of the ones you list above, Tools → Add-ons should be normal and Help → "Check for Updates…" should be a dialog. Not clear that Preferences should stay in front or be non-minimizable, but certainly it shouldn't be resizable, so for that reason alone dialog seems best.
Just to clear up one thing from the commit message: The preferences window with dialog=no gets managed by the tiling window manager in a way which force-resizes the window into the dimensions that the window manager sees fit. Once I used a keyboard shortcut to tell the window manager to stop tiling the pref window and instead manage the window like nontiling window managers do (this is called floating mode), the preferences window jumped back into the size it's supposed to have. When I tried to resize the pref window managed in floating mode, the window always immediately jumped back into its 'default' size. Zotero beta now specifies that the pref window is a dialog window and the tiling window manager identifies it as such; therefore the perf window doesn't get tiled (and force resized) and instead it's left as an unmanaged floating window. I'm pretty sure this behaviour isn't specific to the window manager I use (i3), but it's the way most, if not all, tiling window managers do it. Thanks for the link. I think that I agree that changing Tools → Add-ons to be a normal window and Help → Check for Updates… to a dialog window seems to make sense.
dialog=no
is that it adds a maximize button, and in a normal window manager that creates a huge window without resizing the contents. That's obviously not desired, and that's what I was referring to. (I didn't test whether the window could also be manually resized.)