1// Copyright (c) 2012 The Chromium Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#include "chrome/browser/idle_query_x11.h"
6
7#include <X11/extensions/scrnsaver.h>
8#include "ui/gfx/x/x11_types.h"
9
10namespace chrome {
11
12class IdleData {
13 public:
14  IdleData() {
15    int event_base;
16    int error_base;
17    if (XScreenSaverQueryExtension(gfx::GetXDisplay(), &event_base,
18                                   &error_base)) {
19      mit_info = XScreenSaverAllocInfo();
20    } else {
21      mit_info = NULL;
22    }
23  }
24
25  ~IdleData() {
26    if (mit_info)
27      XFree(mit_info);
28  }
29
30  XScreenSaverInfo *mit_info;
31};
32
33IdleQueryX11::IdleQueryX11() : idle_data_(new IdleData()) {}
34
35IdleQueryX11::~IdleQueryX11() {}
36
37int IdleQueryX11::IdleTime() {
38  if (!idle_data_->mit_info)
39    return 0;
40
41  if (XScreenSaverQueryInfo(gfx::GetXDisplay(),
42                            RootWindow(gfx::GetXDisplay(), 0),
43                            idle_data_->mit_info)) {
44    return (idle_data_->mit_info->idle) / 1000;
45  } else {
46    return 0;
47  }
48}
49
50}  // namespace chrome
51