Index: chrome/browser/fullscreen_gtk.cc |
diff --git a/chrome/browser/fullscreen_gtk.cc b/chrome/browser/fullscreen_gtk.cc |
deleted file mode 100644 |
index 93994083aa8d9de24d2232f43a0cf9cdb30f9765..0000000000000000000000000000000000000000 |
--- a/chrome/browser/fullscreen_gtk.cc |
+++ /dev/null |
@@ -1,143 +0,0 @@ |
-// Copyright (c) 2012 The Chromium Authors. All rights reserved. |
-// Use of this source code is governed by a BSD-style license that can be |
-// found in the LICENSE file. |
- |
-#include "chrome/browser/fullscreen.h" |
- |
-#include <gdk/gdk.h> |
-#include <gdk/gdkx.h> |
- |
-#include <algorithm> |
-#include <vector> |
- |
-#include "base/basictypes.h" |
-#include "ui/base/x/x11_util.h" |
-#include "ui/gfx/rect.h" |
- |
-namespace { |
- |
-// TODO (jianli): Merge with ui::EnumerateTopLevelWindows. |
-void EnumerateAllChildWindows(ui::EnumerateWindowsDelegate* delegate, |
- XID window) { |
- std::vector<XID> windows; |
- |
- if (!ui::GetXWindowStack(window, &windows)) { |
- // Window Manager doesn't support _NET_CLIENT_LIST_STACKING, so fall back |
- // to old school enumeration of all X windows. |
- XID root, parent, *children; |
- unsigned int num_children; |
- int status = XQueryTree(gfx::GetXDisplay(), window, &root, &parent, |
- &children, &num_children); |
- if (status) { |
- for (long i = static_cast<long>(num_children) - 1; i >= 0; i--) |
- windows.push_back(children[i]); |
- XFree(children); |
- } |
- } |
- |
- std::vector<XID>::iterator iter; |
- for (iter = windows.begin(); iter != windows.end(); iter++) { |
- if (delegate->ShouldStopIterating(*iter)) |
- return; |
- } |
-} |
- |
-// To find the top-most window: |
-// 1) Enumerate all top-level windows from the top to the bottom. |
-// 2) For each window: |
-// 2.1) If it is hidden, continue the iteration. |
-// 2.2) If it is managed by the Window Manager (has a WM_STATE property). |
-// Return this window as the top-most window. |
-// 2.3) Enumerate all its child windows. If there is a child window that is |
-// managed by the Window Manager (has a WM_STATE property). Return this |
-// child window as the top-most window. |
-// 2.4) Otherwise, continue the iteration. |
- |
-class WindowManagerWindowFinder : public ui::EnumerateWindowsDelegate { |
- public: |
- WindowManagerWindowFinder() : window_(None) { } |
- |
- XID window() const { return window_; } |
- |
- protected: |
- virtual bool ShouldStopIterating(XID window) OVERRIDE { |
- if (ui::PropertyExists(window, "WM_STATE")) { |
- window_ = window; |
- return true; |
- } |
- return false; |
- } |
- |
- private: |
- XID window_; |
- |
- DISALLOW_COPY_AND_ASSIGN(WindowManagerWindowFinder); |
-}; |
- |
-class TopMostWindowFinder : public ui::EnumerateWindowsDelegate { |
- public: |
- TopMostWindowFinder() |
- : top_most_window_(None) {} |
- |
- XID top_most_window() const { return top_most_window_; } |
- |
- protected: |
- virtual bool ShouldStopIterating(XID window) OVERRIDE { |
- if (!ui::IsWindowVisible(window)) |
- return false; |
- if (ui::PropertyExists(window, "WM_STATE")) { |
- top_most_window_ = window; |
- return true; |
- } |
- WindowManagerWindowFinder child_finder; |
- EnumerateAllChildWindows(&child_finder, window); |
- XID child_window = child_finder.window(); |
- if (child_window == None) |
- return false; |
- top_most_window_ = child_window; |
- return true; |
- } |
- |
- private: |
- XID top_most_window_; |
- |
- DISALLOW_COPY_AND_ASSIGN(TopMostWindowFinder); |
-}; |
- |
-bool IsTopMostWindowFullScreen() { |
- // Find the topmost window. |
- TopMostWindowFinder finder; |
- EnumerateAllChildWindows(&finder, ui::GetX11RootWindow()); |
- XID window = finder.top_most_window(); |
- if (window == None) |
- return false; |
- |
- // Make sure it is not the desktop window. |
- static Atom desktop_atom = gdk_x11_get_xatom_by_name_for_display( |
- gdk_display_get_default(), "_NET_WM_WINDOW_TYPE_DESKTOP"); |
- |
- std::vector<Atom> atom_properties; |
- if (ui::GetAtomArrayProperty(window, |
- "_NET_WM_WINDOW_TYPE", |
- &atom_properties) && |
- std::find(atom_properties.begin(), atom_properties.end(), desktop_atom) |
- != atom_properties.end()) |
- return false; |
- |
- // If it is a GDK window, check it using gdk function. |
- GdkWindow* gwindow = gdk_window_lookup(window); |
- if (gwindow && window != GDK_ROOT_WINDOW()) |
- return gdk_window_get_state(gwindow) == GDK_WINDOW_STATE_FULLSCREEN; |
- |
- // Otherwise, do the check via xlib function. |
- return ui::IsX11WindowFullScreen(window); |
-} |
- |
-} |
- |
-bool IsFullScreenMode() { |
- gdk_error_trap_push(); |
- bool result = IsTopMostWindowFullScreen(); |
- bool got_error = gdk_error_trap_pop(); |
- return result && !got_error; |
-} |