Chromium Code Reviews| Index: ui/base/x/x11_util.cc |
| diff --git a/ui/base/x/x11_util.cc b/ui/base/x/x11_util.cc |
| index 6daf1686c5cdc84da9b43e5e7954c3e0b30d1025..381695e90049551766547758ec72ef0d3883545f 100644 |
| --- a/ui/base/x/x11_util.cc |
| +++ b/ui/base/x/x11_util.cc |
| @@ -994,23 +994,33 @@ void SetWindowRole(XDisplay* display, XID window, const std::string& role) { |
| } |
| bool GetCustomFramePrefDefault() { |
| - // Ideally, we'd use the custom frame by default and just fall back on using |
| - // system decorations for the few (?) tiling window managers where the custom |
| - // frame doesn't make sense (e.g. awesome, ion3, ratpoison, xmonad, etc.) or |
| - // other WMs where it has issues (e.g. Fluxbox -- see issue 19130). The EWMH |
| - // _NET_SUPPORTING_WM property makes it easy to look up a name for the current |
| - // WM, but at least some of the WMs in the latter group don't set it. |
| - // Instead, we default to using system decorations for all WMs and |
| - // special-case the ones where the custom frame should be used. |
| - ui::WindowManagerName wm_type = GuessWindowManager(); |
| - return (wm_type == WM_BLACKBOX || |
| - wm_type == WM_COMPIZ || |
| - wm_type == WM_ENLIGHTENMENT || |
| - wm_type == WM_METACITY || |
| - wm_type == WM_MUFFIN || |
| - wm_type == WM_MUTTER || |
| - wm_type == WM_OPENBOX || |
| - wm_type == WM_XFWM4); |
| + // If the window manager doesn't support enough of EWMH to tell us its name, |
| + // assume that it doesn't want custom frames. |
|
Matt Giuca
2014/09/17 01:09:16
I'm not sure why you make this assumption. If the
Daniel Erat
2014/09/18 16:07:58
if the WM doesn't support EWMH, then it doesn't un
Matt Giuca
2014/09/19 01:01:38
Acknowledged.
|
| + std::string wm_name; |
| + if (!GetWindowManagerName(&wm_name)) |
| + return false; |
| + |
| + // Also disable custom frames for (at-least-partially-)EWMH-supporting tiling |
| + // window managers. |
| + ui::WindowManagerName wm = GuessWindowManager(); |
| + if (wm == WM_AWESOME || |
| + wm == WM_I3 || |
| + wm == WM_ION3 || |
| + wm == WM_MATCHBOX || |
| + wm == WM_NOTION || |
| + wm == WM_QTILE || |
| + wm == WM_RATPOISON || |
| + wm == WM_STUMPWM) |
| + return false; |
| + |
| + // Handle a few more window managers that don't get along well with custom |
| + // frames. |
|
Daniel Erat
2014/09/16 23:48:34
at least, i'm assuming that their omission from th
Elliot Glaysher
2014/09/16 23:59:36
We've had problems with icewm in the past, at leas
|
| + if (wm == WM_ICE_WM || |
| + wm == WM_KWIN) |
| + return false; |
| + |
| + // For everything else, use custom frames. |
| + return true; |
| } |
| bool GetWindowDesktop(XID window, int* desktop) { |
| @@ -1191,10 +1201,10 @@ WindowManagerName GuessWindowManager() { |
| std::string name; |
| if (GetWindowManagerName(&name)) { |
| // These names are taken from the WMs' source code. |
| + if (name == "awesome") |
| + return WM_AWESOME; |
| if (name == "Blackbox") |
| return WM_BLACKBOX; |
| - if (name == "chromeos-wm") |
| - return WM_CHROME_OS; |
| if (name == "Compiz" || name == "compiz") |
| return WM_COMPIZ; |
| if (name == "e16") |
| @@ -1209,10 +1219,24 @@ WindowManagerName GuessWindowManager() { |
| return WM_MUFFIN; |
| if (name == "GNOME Shell") |
| return WM_MUTTER; // GNOME Shell uses Mutter |
| + if (name == "i3") |
| + return WM_I3; |
| + if (name == "ion3") |
| + return WM_ION3; |
| + if (name == "matchbox") |
| + return WM_MATCHBOX; |
| if (name == "Mutter") |
| return WM_MUTTER; |
| + if (name == "notion") // FIXME: Double-check this. |
| + return WM_NOTION; |
| if (name == "Openbox") |
| return WM_OPENBOX; |
| + if (name == "qtile") |
| + return WM_QTILE; |
| + if (name == "ratpoison") |
| + return WM_OPENBOX; |
| + if (name == "stumpwm") |
| + return WM_STUMPWM; |
| if (name == "Xfwm4") |
| return WM_XFWM4; |
| } |