Commit aa5c6378 authored by Tom Anderson's avatar Tom Anderson Committed by Commit Bot

[XProto] Remove usage of XScreenSaver extension

BUG=1066670
R=msisov
CC=sky,nickdiego

Change-Id: Iaec104e97e18dca682229a6c52edd1e770c63e6b
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2261490
Auto-Submit: Thomas Anderson <thomasanderson@chromium.org>
Commit-Queue: Scott Violet <sky@chromium.org>
Reviewed-by: default avatarScott Violet <sky@chromium.org>
Reviewed-by: default avatarMaksim Sisov <msisov@igalia.com>
Cr-Commit-Position: refs/heads/master@{#782094}
parent 72068429
...@@ -64,10 +64,6 @@ config("xrandr") { ...@@ -64,10 +64,6 @@ config("xrandr") {
libs = [ "Xrandr" ] libs = [ "Xrandr" ]
} }
config("xscrnsaver") {
libs = [ "Xss" ]
}
config("xfixes") { config("xfixes") {
libs = [ "Xfixes" ] libs = [ "Xfixes" ]
} }
......
...@@ -47,7 +47,6 @@ source_set("power_save_blocker") { ...@@ -47,7 +47,6 @@ source_set("power_save_blocker") {
"//ui/gfx", "//ui/gfx",
] ]
if (use_x11) { if (use_x11) {
configs += [ "//build/config/linux:xscrnsaver" ]
deps += [ "//ui/gfx/x" ] deps += [ "//ui/gfx/x" ]
} }
} else if (is_mac) { } else if (is_mac) {
......
...@@ -26,8 +26,8 @@ ...@@ -26,8 +26,8 @@
#include "ui/gfx/switches.h" #include "ui/gfx/switches.h"
#if defined(USE_X11) #if defined(USE_X11)
#include <X11/extensions/scrnsaver.h> #include "ui/gfx/x/connection.h" // nogncheck
#include "ui/gfx/x/screensaver.h" // nogncheck
#include "ui/gfx/x/x11_types.h" // nogncheck #include "ui/gfx/x/x11_types.h" // nogncheck
#endif #endif
...@@ -138,18 +138,16 @@ bool X11ScreenSaverAvailable() { ...@@ -138,18 +138,16 @@ bool X11ScreenSaverAvailable() {
// X Screen Saver isn't accessible in headless mode. // X Screen Saver isn't accessible in headless mode.
if (base::CommandLine::ForCurrentProcess()->HasSwitch(switches::kHeadless)) if (base::CommandLine::ForCurrentProcess()->HasSwitch(switches::kHeadless))
return false; return false;
XDisplay* display = gfx::GetXDisplay(); auto* connection = x11::Connection::Get();
int dummy;
int major;
int minor;
if (!XScreenSaverQueryExtension(display, &dummy, &dummy))
return false;
if (!XScreenSaverQueryVersion(display, &major, &minor)) auto version = connection->screensaver()
return false; .QueryVersion({x11::ScreenSaver::major_version,
x11::ScreenSaver::minor_version})
.Sync();
return major > 1 || (major == 1 && minor >= 1); return version && (version->server_major_version > 1 ||
(version->server_major_version == 1 &&
version->server_minor_version >= 1));
} }
// Wrapper for XScreenSaverSuspend. Checks whether the X11 Screen Saver // Wrapper for XScreenSaverSuspend. Checks whether the X11 Screen Saver
...@@ -159,8 +157,8 @@ void X11ScreenSaverSuspendSet(bool suspend) { ...@@ -159,8 +157,8 @@ void X11ScreenSaverSuspendSet(bool suspend) {
if (!X11ScreenSaverAvailable()) if (!X11ScreenSaverAvailable())
return; return;
XDisplay* display = gfx::GetXDisplay(); auto* connection = x11::Connection::Get();
XScreenSaverSuspend(display, suspend); connection->screensaver().Suspend({suspend});
} }
#endif #endif
......
...@@ -61,7 +61,6 @@ component("idle") { ...@@ -61,7 +61,6 @@ component("idle") {
} }
if (use_x11 && !is_chromeos) { if (use_x11 && !is_chromeos) {
configs += [ "//build/config/linux:xscrnsaver" ]
deps += [ "//ui/gfx/x" ] deps += [ "//ui/gfx/x" ]
sources += [ sources += [
"idle_query_x11.cc", "idle_query_x11.cc",
......
...@@ -4,43 +4,28 @@ ...@@ -4,43 +4,28 @@
#include "ui/base/idle/idle_query_x11.h" #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.h"
#include "ui/gfx/x/x11_types.h" #include "ui/gfx/x/x11_types.h"
namespace ui { namespace ui {
class IdleData { IdleQueryX11::IdleQueryX11() : connection_(x11::Connection::Get()) {
public: // Let the server know the client version before making any requests.
IdleData() { connection_->screensaver().QueryVersion(
int event_base; {x11::ScreenSaver::major_version, x11::ScreenSaver::minor_version});
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() {} IdleQueryX11::~IdleQueryX11() = default;
int IdleQueryX11::IdleTime() { int IdleQueryX11::IdleTime() {
if (!idle_data_->mit_info) if (auto reply = connection_->screensaver()
return 0; .QueryInfo({connection_->default_root()})
.Sync()) {
if (XScreenSaverQueryInfo(gfx::GetXDisplay(), return reply->ms_since_user_input / 1000;
XRootWindow(gfx::GetXDisplay(), 0),
idle_data_->mit_info.get())) {
return (idle_data_->mit_info->idle) / 1000;
} else {
return 0;
} }
return 0;
} }
} // namespace ui } // namespace ui
...@@ -9,9 +9,11 @@ ...@@ -9,9 +9,11 @@
#include "base/macros.h" #include "base/macros.h"
namespace ui { namespace x11 {
class Connection;
}
class IdleData; namespace ui {
class IdleQueryX11 { class IdleQueryX11 {
public: public:
...@@ -21,7 +23,7 @@ class IdleQueryX11 { ...@@ -21,7 +23,7 @@ class IdleQueryX11 {
int IdleTime(); int IdleTime();
private: private:
std::unique_ptr<IdleData> idle_data_; x11::Connection* connection_;
DISALLOW_COPY_AND_ASSIGN(IdleQueryX11); DISALLOW_COPY_AND_ASSIGN(IdleQueryX11);
}; };
......
...@@ -5,6 +5,8 @@ ...@@ -5,6 +5,8 @@
#include "ui/base/idle/screensaver_window_finder_x11.h" #include "ui/base/idle/screensaver_window_finder_x11.h"
#include "ui/base/x/x11_util.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.h"
#include "ui/gfx/x/x11_atom_cache.h" #include "ui/gfx/x/x11_atom_cache.h"
#include "ui/gfx/x/x11_error_tracker.h" #include "ui/gfx/x/x11_error_tracker.h"
...@@ -14,16 +16,16 @@ namespace ui { ...@@ -14,16 +16,16 @@ namespace ui {
ScreensaverWindowFinder::ScreensaverWindowFinder() : exists_(false) {} ScreensaverWindowFinder::ScreensaverWindowFinder() : exists_(false) {}
bool ScreensaverWindowFinder::ScreensaverWindowExists() { bool ScreensaverWindowFinder::ScreensaverWindowExists() {
XScreenSaverInfo info; auto* connection = x11::Connection::Get();
XDisplay* display = gfx::GetXDisplay();
x11::Window root = ui::GetX11RootWindow(); // Let the server know the client version before making any requests.
static int xss_event_base; connection->screensaver().QueryVersion(
static int xss_error_base; {x11::ScreenSaver::major_version, x11::ScreenSaver::minor_version});
static bool have_xss =
XScreenSaverQueryExtension(display, &xss_event_base, &xss_error_base); auto reply =
if (have_xss && connection->screensaver().QueryInfo({connection->default_root()}).Sync();
XScreenSaverQueryInfo(display, static_cast<uint32_t>(root), &info) && if (reply && static_cast<x11::ScreenSaver::State>(reply->state) ==
info.state == ScreenSaverOn) { x11::ScreenSaver::State::On) {
return true; return true;
} }
...@@ -33,7 +35,8 @@ bool ScreensaverWindowFinder::ScreensaverWindowExists() { ...@@ -33,7 +35,8 @@ bool ScreensaverWindowFinder::ScreensaverWindowExists() {
// for xscreensaver. // for xscreensaver.
x11::Atom lock_atom = gfx::GetAtom("LOCK"); x11::Atom lock_atom = gfx::GetAtom("LOCK");
std::vector<int> atom_properties; std::vector<int> atom_properties;
if (GetIntArrayProperty(root, "_SCREENSAVER_STATUS", &atom_properties) && if (GetIntArrayProperty(GetX11RootWindow(), "_SCREENSAVER_STATUS",
&atom_properties) &&
atom_properties.size() > 0) { atom_properties.size() > 0) {
if (atom_properties[0] == static_cast<int>(lock_atom)) { if (atom_properties[0] == static_cast<int>(lock_atom)) {
return true; return true;
......
...@@ -34,7 +34,6 @@ extern "C" { ...@@ -34,7 +34,6 @@ extern "C" {
#include <X11/extensions/Xrandr.h> #include <X11/extensions/Xrandr.h>
#include <X11/extensions/Xrender.h> #include <X11/extensions/Xrender.h>
#include <X11/extensions/record.h> #include <X11/extensions/record.h>
#include <X11/extensions/scrnsaver.h>
#include <X11/extensions/shape.h> #include <X11/extensions/shape.h>
#include <X11/extensions/sync.h> #include <X11/extensions/sync.h>
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment