summaryrefslogtreecommitdiffstats
path: root/ui
diff options
context:
space:
mode:
authorsadrul@chromium.org <sadrul@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2014-03-19 19:38:29 +0000
committersadrul@chromium.org <sadrul@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2014-03-19 19:38:29 +0000
commit106d98f1f1cbeb7e57fe46a4d372582258ad0c6d (patch)
tree7c80130f19003631fb373d1d6ba49e5736b15f2b /ui
parentd157173e1e07a47126b94b7e13c16ea266dc9f7d (diff)
downloadchromium_src-106d98f1f1cbeb7e57fe46a4d372582258ad0c6d.zip
chromium_src-106d98f1f1cbeb7e57fe46a4d372582258ad0c6d.tar.gz
chromium_src-106d98f1f1cbeb7e57fe46a4d372582258ad0c6d.tar.bz2
x11: Move X11ErrorHandler out of //base/ into //ui/gfx/x/
This is a simple file-move, with a notable change for linux-gtk that instead of using the GDK API for capturing X errors, this patch uses raw X API (which is currently used on chromeos and linux-aura). BUG=none R=brettw@chromium.org, oshima@chromium.org, sky@chromium.org Review URL: https://codereview.chromium.org/203273006 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@258061 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'ui')
-rw-r--r--ui/base/x/x11_util.cc10
-rw-r--r--ui/display/chromeos/x11/DEPS3
-rw-r--r--ui/display/chromeos/x11/native_display_delegate_x11.cc4
-rw-r--r--ui/display/display.gyp2
-rw-r--r--ui/gfx/gfx.gyp2
-rw-r--r--ui/gfx/x/x11_error_tracker.cc34
-rw-r--r--ui/gfx/x/x11_error_tracker.h36
7 files changed, 84 insertions, 7 deletions
diff --git a/ui/base/x/x11_util.cc b/ui/base/x/x11_util.cc
index c71740c..007157c 100644
--- a/ui/base/x/x11_util.cc
+++ b/ui/base/x/x11_util.cc
@@ -33,7 +33,6 @@
#include "base/strings/stringprintf.h"
#include "base/sys_byteorder.h"
#include "base/threading/thread.h"
-#include "base/x11/x11_error_tracker.h"
#include "third_party/skia/include/core/SkBitmap.h"
#include "third_party/skia/include/core/SkPostConfig.h"
#include "ui/base/x/x11_util_internal.h"
@@ -48,6 +47,7 @@
#include "ui/gfx/point_conversions.h"
#include "ui/gfx/rect.h"
#include "ui/gfx/size.h"
+#include "ui/gfx/x/x11_error_tracker.h"
#if defined(OS_FREEBSD)
#include <sys/sysctl.h>
@@ -317,7 +317,7 @@ static SharedMemorySupport DoQuerySharedMemorySupport(XDisplay* dpy) {
memset(&shminfo, 0, sizeof(shminfo));
shminfo.shmid = shmkey;
- base::X11ErrorTracker err_tracker;
+ gfx::X11ErrorTracker err_tracker;
bool result = XShmAttach(dpy, &shminfo);
if (result)
VLOG(1) << "X got shared memory segment " << shmkey;
@@ -928,7 +928,7 @@ bool SetIntArrayProperty(XID window,
for (size_t i = 0; i < value.size(); ++i)
data[i] = value[i];
- base::X11ErrorTracker err_tracker;
+ gfx::X11ErrorTracker err_tracker;
XChangeProperty(gfx::GetXDisplay(),
window,
name_atom,
@@ -953,7 +953,7 @@ bool SetAtomArrayProperty(XID window,
for (size_t i = 0; i < value.size(); ++i)
data[i] = value[i];
- base::X11ErrorTracker err_tracker;
+ gfx::X11ErrorTracker err_tracker;
XChangeProperty(gfx::GetXDisplay(),
window,
name_atom,
@@ -1277,7 +1277,7 @@ bool GetWindowManagerName(std::string* wm_name) {
// _NET_SUPPORTING_WM_CHECK property pointing to itself (to avoid a stale
// property referencing an ID that's been recycled for another window), so we
// check that too.
- base::X11ErrorTracker err_tracker;
+ gfx::X11ErrorTracker err_tracker;
int wm_window_property = 0;
bool result = GetIntProperty(
wm_window, "_NET_SUPPORTING_WM_CHECK", &wm_window_property);
diff --git a/ui/display/chromeos/x11/DEPS b/ui/display/chromeos/x11/DEPS
new file mode 100644
index 0000000..25c2d71
--- /dev/null
+++ b/ui/display/chromeos/x11/DEPS
@@ -0,0 +1,3 @@
+include_rules = [
+ "+ui/gfx/x",
+]
diff --git a/ui/display/chromeos/x11/native_display_delegate_x11.cc b/ui/display/chromeos/x11/native_display_delegate_x11.cc
index 982d74a..de8a3aa 100644
--- a/ui/display/chromeos/x11/native_display_delegate_x11.cc
+++ b/ui/display/chromeos/x11/native_display_delegate_x11.cc
@@ -17,12 +17,12 @@
#include "base/message_loop/message_pump_x11.h"
#include "base/stl_util.h"
#include "base/x11/edid_parser_x11.h"
-#include "base/x11/x11_error_tracker.h"
#include "ui/display/chromeos/native_display_observer.h"
#include "ui/display/chromeos/x11/display_mode_x11.h"
#include "ui/display/chromeos/x11/display_snapshot_x11.h"
#include "ui/display/chromeos/x11/display_util.h"
#include "ui/display/chromeos/x11/native_display_event_dispatcher_x11.h"
+#include "ui/gfx/x/x11_error_tracker.h"
namespace ui {
@@ -465,7 +465,7 @@ bool NativeDisplayDelegateX11::SetHDCPState(const DisplaySnapshot& output,
NOTREACHED() << "Invalid HDCP state: " << state;
return false;
}
- base::X11ErrorTracker err_tracker;
+ gfx::X11ErrorTracker err_tracker;
unsigned char* data = reinterpret_cast<unsigned char*>(&value);
RROutput output_id = static_cast<const DisplaySnapshotX11&>(output).output();
XRRChangeOutputProperty(
diff --git a/ui/display/display.gyp b/ui/display/display.gyp
index 48e8a7b..5f766ac 100644
--- a/ui/display/display.gyp
+++ b/ui/display/display.gyp
@@ -12,6 +12,7 @@
'type': '<(component)',
'dependencies': [
'../../base/base.gyp:base',
+ '../../ui/gfx/gfx.gyp:gfx',
'../../ui/gfx/gfx.gyp:gfx_geometry',
],
'defines': [
@@ -57,6 +58,7 @@
'type': '<(component)',
'dependencies': [
'../../base/base.gyp:base',
+ '../../ui/gfx/gfx.gyp:gfx',
'../../ui/gfx/gfx.gyp:gfx_geometry',
'display',
],
diff --git a/ui/gfx/gfx.gyp b/ui/gfx/gfx.gyp
index 23fe0b7..b712b0b 100644
--- a/ui/gfx/gfx.gyp
+++ b/ui/gfx/gfx.gyp
@@ -314,6 +314,8 @@
'win/window_impl.h',
'x/x11_atom_cache.cc',
'x/x11_atom_cache.h',
+ 'x/x11_error_tracker.cc',
+ 'x/x11_error_tracker.h',
'x/x11_types.cc',
'x/x11_types.h',
],
diff --git a/ui/gfx/x/x11_error_tracker.cc b/ui/gfx/x/x11_error_tracker.cc
new file mode 100644
index 0000000..16ed595
--- /dev/null
+++ b/ui/gfx/x/x11_error_tracker.cc
@@ -0,0 +1,34 @@
+// Copyright 2014 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "ui/gfx/x/x11_error_tracker.h"
+
+#include "ui/gfx/x/x11_types.h"
+
+namespace {
+
+unsigned char g_x11_error_code = 0;
+
+int X11ErrorHandler(Display* display, XErrorEvent* error) {
+ g_x11_error_code = error->error_code;
+ return 0;
+}
+}
+
+namespace gfx {
+
+X11ErrorTracker::X11ErrorTracker() {
+ old_handler_ = XSetErrorHandler(X11ErrorHandler);
+}
+
+X11ErrorTracker::~X11ErrorTracker() { XSetErrorHandler(old_handler_); }
+
+bool X11ErrorTracker::FoundNewError() {
+ XSync(GetXDisplay(), False);
+ unsigned char error = g_x11_error_code;
+ g_x11_error_code = 0;
+ return error != 0;
+}
+
+} // namespace gfx
diff --git a/ui/gfx/x/x11_error_tracker.h b/ui/gfx/x/x11_error_tracker.h
new file mode 100644
index 0000000..efcac0c
--- /dev/null
+++ b/ui/gfx/x/x11_error_tracker.h
@@ -0,0 +1,36 @@
+// Copyright 2014 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef UI_GFX_X_X11_ERROR_TRACKER_H_
+#define UI_GFX_X_X11_ERROR_TRACKER_H_
+
+#include <X11/Xlib.h>
+
+#include "base/basictypes.h"
+#include "ui/gfx/gfx_export.h"
+
+namespace gfx {
+
+// X11ErrorTracker catches X11 errors in a non-fatal way. It does so by
+// temporarily changing the X11 error handler. The old error handler is
+// restored when the tracker is destroyed.
+class GFX_EXPORT X11ErrorTracker {
+ public:
+ X11ErrorTracker();
+ ~X11ErrorTracker();
+
+ // Returns whether an X11 error happened since this function was last called
+ // (or since the creation of the tracker). This is potentially expensive,
+ // since this causes a sync with the X server.
+ bool FoundNewError();
+
+ private:
+ XErrorHandler old_handler_;
+
+ DISALLOW_COPY_AND_ASSIGN(X11ErrorTracker);
+};
+
+} // namespace gfx
+
+#endif // UI_GFX_X_X11_ERROR_TRACKER_H_