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") {
libs = [ "Xrandr" ]
}
config("xscrnsaver") {
libs = [ "Xss" ]
}
config("xfixes") {
libs = [ "Xfixes" ]
}
......
......@@ -47,7 +47,6 @@ source_set("power_save_blocker") {
"//ui/gfx",
]
if (use_x11) {
configs += [ "//build/config/linux:xscrnsaver" ]
deps += [ "//ui/gfx/x" ]
}
} else if (is_mac) {
......
......@@ -26,9 +26,9 @@
#include "ui/gfx/switches.h"
#if defined(USE_X11)
#include <X11/extensions/scrnsaver.h>
#include "ui/gfx/x/x11_types.h" // nogncheck
#include "ui/gfx/x/connection.h" // nogncheck
#include "ui/gfx/x/screensaver.h" // nogncheck
#include "ui/gfx/x/x11_types.h" // nogncheck
#endif
namespace device {
......@@ -138,18 +138,16 @@ bool X11ScreenSaverAvailable() {
// X Screen Saver isn't accessible in headless mode.
if (base::CommandLine::ForCurrentProcess()->HasSwitch(switches::kHeadless))
return false;
XDisplay* display = gfx::GetXDisplay();
int dummy;
int major;
int minor;
if (!XScreenSaverQueryExtension(display, &dummy, &dummy))
return false;
auto* connection = x11::Connection::Get();
if (!XScreenSaverQueryVersion(display, &major, &minor))
return false;
auto version = connection->screensaver()
.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
......@@ -159,8 +157,8 @@ void X11ScreenSaverSuspendSet(bool suspend) {
if (!X11ScreenSaverAvailable())
return;
XDisplay* display = gfx::GetXDisplay();
XScreenSaverSuspend(display, suspend);
auto* connection = x11::Connection::Get();
connection->screensaver().Suspend({suspend});
}
#endif
......
......@@ -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",
......
......@@ -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
......@@ -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);
};
......
......@@ -5,6 +5,8 @@
#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"
......@@ -14,16 +16,16 @@ namespace ui {
ScreensaverWindowFinder::ScreensaverWindowFinder() : exists_(false) {}
bool ScreensaverWindowFinder::ScreensaverWindowExists() {
XScreenSaverInfo info;
XDisplay* display = gfx::GetXDisplay();
x11::Window root = ui::GetX11RootWindow();
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, static_cast<uint32_t>(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;
}
......@@ -33,7 +35,8 @@ bool ScreensaverWindowFinder::ScreensaverWindowExists() {
// for xscreensaver.
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;
......
......@@ -34,7 +34,6 @@ extern "C" {
#include <X11/extensions/Xrandr.h>
#include <X11/extensions/Xrender.h>
#include <X11/extensions/record.h>
#include <X11/extensions/scrnsaver.h>
#include <X11/extensions/shape.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