Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(865)

Unified Diff: ui/base/x/x11_util.cc

Issue 16002008: linux_aura: Implement the fallback path in IsX11WindowFullScreen. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: blank line Created 7 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: ui/base/x/x11_util.cc
diff --git a/ui/base/x/x11_util.cc b/ui/base/x/x11_util.cc
index cf5f2a8582919894c93b3150cc7dda38635fde3f..e288c3b223859878a8a0f460c48ba67a59fd7ddf 100644
--- a/ui/base/x/x11_util.cc
+++ b/ui/base/x/x11_util.cc
@@ -1309,16 +1309,30 @@ void SetDefaultX11ErrorHandlers() {
}
bool IsX11WindowFullScreen(XID window) {
- // First check if _NET_WM_STATE property contains _NET_WM_STATE_FULLSCREEN.
- static Atom atom = GetAtom("_NET_WM_STATE_FULLSCREEN");
-
- std::vector<Atom> atom_properties;
- if (GetAtomArrayProperty(window,
- "_NET_WM_STATE",
- &atom_properties) &&
- std::find(atom_properties.begin(), atom_properties.end(), atom)
- != atom_properties.end())
- return true;
+ // If _NET_WM_STATE_FULLSCREEN is in _NET_SUPPORTED, use the presence or
+ // absence of _NET_WM_STATE_FULLSCREEN in _NET_WM_STATE to determine
+ // whether we're fullscreen.
+ std::vector<Atom> supported_atoms;
+ if (GetAtomArrayProperty(GetX11RootWindow(),
+ "_NET_SUPPORTED",
+ &supported_atoms)) {
+ Atom atom = GetAtom("_NET_WM_STATE_FULLSCREEN");
+
+ if (std::find(supported_atoms.begin(), supported_atoms.end(), atom)
+ != supported_atoms.end()) {
+ std::vector<Atom> atom_properties;
+ if (GetAtomArrayProperty(window,
+ "_NET_WM_STATE",
+ &atom_properties)) {
+ return std::find(atom_properties.begin(), atom_properties.end(), atom)
+ != atom_properties.end();
+ }
+ }
+ }
+
+ gfx::Rect window_rect;
+ if (!ui::GetWindowRect(window, &window_rect))
+ return false;
#if defined(TOOLKIT_GTK)
// As the last resort, check if the window size is as large as the main
@@ -1326,17 +1340,21 @@ bool IsX11WindowFullScreen(XID window) {
GdkRectangle monitor_rect;
gdk_screen_get_monitor_geometry(gdk_screen_get_default(), 0, &monitor_rect);
- gfx::Rect window_rect;
- if (!ui::GetWindowRect(window, &window_rect))
- return false;
-
return monitor_rect.x == window_rect.x() &&
monitor_rect.y == window_rect.y() &&
monitor_rect.width == window_rect.width() &&
monitor_rect.height == window_rect.height();
#else
- NOTIMPLEMENTED();
- return false;
+ // We can't use gfx::Screen here because we don't have an aura::Window. So
+ // instead just look at the size of the default display.
+ //
+ // TODO(erg): Actually doing this correctly would require pulling out xrandr,
+ // which we don't even do in the desktop screen yet.
+ ::Display* display = ui::GetXDisplay();
+ ::Screen* screen = DefaultScreenOfDisplay(display);
+ int width = WidthOfScreen(screen);
+ int height = HeightOfScreen(screen);
+ return window_rect.size() == gfx::Size(width, height);
#endif
}
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698