Home | History | Annotate | Download | only in engine
      1 // Copyright (c) 2009 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/sync/engine/idle_query_linux.h"
      6 
      7 #include <X11/extensions/scrnsaver.h>
      8 #include "ui/base/x/x11_util.h"
      9 
     10 namespace browser_sync {
     11 
     12 class IdleData {
     13  public:
     14   IdleData() {
     15     int event_base;
     16     int error_base;
     17     if (XScreenSaverQueryExtension(ui::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 
     33 IdleQueryLinux::IdleQueryLinux() : idle_data_(new IdleData()) {}
     34 
     35 IdleQueryLinux::~IdleQueryLinux() {}
     36 
     37 int IdleQueryLinux::IdleTime() {
     38   if (!idle_data_->mit_info)
     39     return 0;
     40 
     41   if (XScreenSaverQueryInfo(ui::GetXDisplay(),
     42                             RootWindow(ui::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 browser_sync
     51