diff options
Diffstat (limited to 'chromium/ui/base/idle')
-rw-r--r-- | chromium/ui/base/idle/BUILD.gn | 1 | ||||
-rw-r--r-- | chromium/ui/base/idle/idle_query_x11.cc | 41 | ||||
-rw-r--r-- | chromium/ui/base/idle/idle_query_x11.h | 8 | ||||
-rw-r--r-- | chromium/ui/base/idle/screensaver_window_finder_x11.cc | 34 | ||||
-rw-r--r-- | chromium/ui/base/idle/screensaver_window_finder_x11.h | 4 |
5 files changed, 38 insertions, 50 deletions
diff --git a/chromium/ui/base/idle/BUILD.gn b/chromium/ui/base/idle/BUILD.gn index 9120a2df91e..8e76844e5b6 100644 --- a/chromium/ui/base/idle/BUILD.gn +++ b/chromium/ui/base/idle/BUILD.gn @@ -61,7 +61,6 @@ component("idle") { } if (use_x11 && !is_chromeos) { - configs += [ "//build/config/linux:xscrnsaver" ] deps += [ "//ui/gfx/x" ] sources += [ "idle_query_x11.cc", diff --git a/chromium/ui/base/idle/idle_query_x11.cc b/chromium/ui/base/idle/idle_query_x11.cc index ee676686f36..569c57a2d71 100644 --- a/chromium/ui/base/idle/idle_query_x11.cc +++ b/chromium/ui/base/idle/idle_query_x11.cc @@ -4,43 +4,28 @@ #include "ui/base/idle/idle_query_x11.h" +#include "ui/gfx/x/connection.h" +#include "ui/gfx/x/screensaver.h" #include "ui/gfx/x/x11.h" #include "ui/gfx/x/x11_types.h" namespace ui { -class IdleData { - public: - IdleData() { - int event_base; - int error_base; - if (XScreenSaverQueryExtension(gfx::GetXDisplay(), &event_base, - &error_base)) { - mit_info.reset(XScreenSaverAllocInfo()); - } - } - - ~IdleData() { - } - - gfx::XScopedPtr<XScreenSaverInfo> mit_info; -}; - -IdleQueryX11::IdleQueryX11() : idle_data_(new IdleData()) {} +IdleQueryX11::IdleQueryX11() : connection_(x11::Connection::Get()) { + // Let the server know the client version before making any requests. + connection_->screensaver().QueryVersion( + {x11::ScreenSaver::major_version, x11::ScreenSaver::minor_version}); +} -IdleQueryX11::~IdleQueryX11() {} +IdleQueryX11::~IdleQueryX11() = default; int IdleQueryX11::IdleTime() { - if (!idle_data_->mit_info) - return 0; - - if (XScreenSaverQueryInfo(gfx::GetXDisplay(), - XRootWindow(gfx::GetXDisplay(), 0), - idle_data_->mit_info.get())) { - return (idle_data_->mit_info->idle) / 1000; - } else { - return 0; + if (auto reply = connection_->screensaver() + .QueryInfo({connection_->default_root()}) + .Sync()) { + return reply->ms_since_user_input / 1000; } + return 0; } } // namespace ui diff --git a/chromium/ui/base/idle/idle_query_x11.h b/chromium/ui/base/idle/idle_query_x11.h index 0857418897e..457aada6a1e 100644 --- a/chromium/ui/base/idle/idle_query_x11.h +++ b/chromium/ui/base/idle/idle_query_x11.h @@ -9,9 +9,11 @@ #include "base/macros.h" -namespace ui { +namespace x11 { +class Connection; +} -class IdleData; +namespace ui { class IdleQueryX11 { public: @@ -21,7 +23,7 @@ class IdleQueryX11 { int IdleTime(); private: - std::unique_ptr<IdleData> idle_data_; + x11::Connection* connection_; DISALLOW_COPY_AND_ASSIGN(IdleQueryX11); }; diff --git a/chromium/ui/base/idle/screensaver_window_finder_x11.cc b/chromium/ui/base/idle/screensaver_window_finder_x11.cc index 74f1a5f6fcd..45342ff5383 100644 --- a/chromium/ui/base/idle/screensaver_window_finder_x11.cc +++ b/chromium/ui/base/idle/screensaver_window_finder_x11.cc @@ -5,26 +5,27 @@ #include "ui/base/idle/screensaver_window_finder_x11.h" #include "ui/base/x/x11_util.h" +#include "ui/gfx/x/connection.h" +#include "ui/gfx/x/screensaver.h" #include "ui/gfx/x/x11.h" #include "ui/gfx/x/x11_atom_cache.h" #include "ui/gfx/x/x11_error_tracker.h" namespace ui { -ScreensaverWindowFinder::ScreensaverWindowFinder() - : exists_(false) { -} +ScreensaverWindowFinder::ScreensaverWindowFinder() : exists_(false) {} bool ScreensaverWindowFinder::ScreensaverWindowExists() { - XScreenSaverInfo info; - XDisplay* display = gfx::GetXDisplay(); - XID root = DefaultRootWindow(display); - static int xss_event_base; - static int xss_error_base; - static bool have_xss = - XScreenSaverQueryExtension(display, &xss_event_base, &xss_error_base); - if (have_xss && XScreenSaverQueryInfo(display, root, &info) && - info.state == ScreenSaverOn) { + auto* connection = x11::Connection::Get(); + + // Let the server know the client version before making any requests. + connection->screensaver().QueryVersion( + {x11::ScreenSaver::major_version, x11::ScreenSaver::minor_version}); + + auto reply = + connection->screensaver().QueryInfo({connection->default_root()}).Sync(); + if (reply && static_cast<x11::ScreenSaver::State>(reply->state) == + x11::ScreenSaver::State::On) { return true; } @@ -32,9 +33,10 @@ bool ScreensaverWindowFinder::ScreensaverWindowExists() { // info.state == ScreenSaverOff or info.state == ScreenSaverDisabled does not // necessarily mean that a screensaver is not active, so add a special check // for xscreensaver. - XAtom lock_atom = gfx::GetAtom("LOCK"); + x11::Atom lock_atom = gfx::GetAtom("LOCK"); std::vector<int> atom_properties; - if (GetIntArrayProperty(root, "_SCREENSAVER_STATUS", &atom_properties) && + if (GetIntArrayProperty(GetX11RootWindow(), "_SCREENSAVER_STATUS", + &atom_properties) && atom_properties.size() > 0) { if (atom_properties[0] == static_cast<int>(lock_atom)) { return true; @@ -48,14 +50,14 @@ bool ScreensaverWindowFinder::ScreensaverWindowExists() { return finder.exists_ && !err_tracker.FoundNewError(); } -bool ScreensaverWindowFinder::ShouldStopIterating(XID window) { +bool ScreensaverWindowFinder::ShouldStopIterating(x11::Window window) { if (!ui::IsWindowVisible(window) || !IsScreensaverWindow(window)) return false; exists_ = true; return true; } -bool ScreensaverWindowFinder::IsScreensaverWindow(XID window) const { +bool ScreensaverWindowFinder::IsScreensaverWindow(x11::Window window) const { // It should occupy the full screen. if (!ui::IsX11WindowFullScreen(window)) return false; diff --git a/chromium/ui/base/idle/screensaver_window_finder_x11.h b/chromium/ui/base/idle/screensaver_window_finder_x11.h index dad3d209510..a502daa6fbe 100644 --- a/chromium/ui/base/idle/screensaver_window_finder_x11.h +++ b/chromium/ui/base/idle/screensaver_window_finder_x11.h @@ -16,12 +16,12 @@ class ScreensaverWindowFinder : public ui::EnumerateWindowsDelegate { static bool ScreensaverWindowExists(); protected: - bool ShouldStopIterating(XID window) override; + bool ShouldStopIterating(x11::Window window) override; private: ScreensaverWindowFinder(); - bool IsScreensaverWindow(XID window) const; + bool IsScreensaverWindow(x11::Window window) const; bool exists_; |