Index: ui/base/x/x11_util.cc |
diff --git a/ui/base/x/x11_util.cc b/ui/base/x/x11_util.cc |
index 82cdab78f54bc87e603501517f112e3db282c54e..39c2cff7c6f098fd1a951ce4113924f20b23bc70 100644 |
--- a/ui/base/x/x11_util.cc |
+++ b/ui/base/x/x11_util.cc |
@@ -8,10 +8,6 @@ |
#include "ui/base/x/x11_util.h" |
-#include <gdk/gdk.h> |
-#include <gdk/gdkx.h> |
-#include <gtk/gtk.h> |
- |
#include <sys/ipc.h> |
#include <sys/shm.h> |
@@ -28,6 +24,18 @@ |
#include "ui/gfx/rect.h" |
#include "ui/gfx/size.h" |
+#if defined(TOOLKIT_USES_GTK) |
+#include <gdk/gdk.h> |
+#include <gdk/gdkx.h> |
+#include <gtk/gtk.h> |
+#else |
+// TODO(sad): Use the new way of handling X errors when |
+// http://codereview.chromium.org/7889040/ lands. |
+#define gdk_error_trap_push() |
+#define gdk_error_trap_pop() false |
+#define gdk_flush() |
+#endif |
+ |
namespace ui { |
namespace { |
@@ -68,13 +76,20 @@ int DefaultX11IOErrorHandler(Display* d) { |
_exit(1); |
} |
+Atom GetAtom(const char* name) { |
+#if defined(TOOLKIT_USES_GTK) |
+ return gdk_x11_get_xatom_by_name_for_display( |
+ gdk_display_get_default(), name); |
+#else |
+ return XInternAtom(GetXDisplay(), name, false); |
+#endif |
+} |
+ |
// Note: The caller should free the resulting value data. |
bool GetProperty(XID window, const std::string& property_name, long max_length, |
Atom* type, int* format, unsigned long* num_items, |
unsigned char** property) { |
- Atom property_atom = gdk_x11_get_xatom_by_name_for_display( |
- gdk_display_get_default(), property_name.c_str()); |
- |
+ Atom property_atom = GetAtom(property_name.c_str()); |
unsigned long remaining_bytes = 0; |
return XGetWindowProperty(GetXDisplay(), |
window, |
@@ -93,7 +108,7 @@ bool GetProperty(XID window, const std::string& property_name, long max_length, |
} // namespace |
bool XDisplayExists() { |
- return (gdk_display_get_default() != NULL); |
+ return (GetXDisplay() != NULL); |
} |
Display* GetXDisplay() { |
@@ -166,13 +181,14 @@ int GetDefaultScreen(Display* display) { |
} |
XID GetX11RootWindow() { |
- return GDK_WINDOW_XID(gdk_get_default_root_window()); |
+ return DefaultRootWindow(GetXDisplay()); |
} |
bool GetCurrentDesktop(int* desktop) { |
return GetIntProperty(GetX11RootWindow(), "_NET_CURRENT_DESKTOP", desktop); |
} |
+#if defined(TOOLKIT_USES_GTK) |
XID GetX11WindowFromGtkWidget(GtkWidget* widget) { |
return GDK_WINDOW_XID(widget->window); |
} |
@@ -197,6 +213,7 @@ GtkWindow* GetGtkWindowFromX11Window(XID xid) { |
void* GetVisualFromGtkWidget(GtkWidget* widget) { |
return GDK_VISUAL_XVISUAL(gtk_widget_get_visual(widget)); |
} |
+#endif // defined(TOOLKIT_USES_GTK) |
int BitsPerPixelForPixmapDepth(Display* dpy, int depth) { |
int count; |
@@ -667,8 +684,7 @@ bool ChangeWindowDesktop(XID window, XID destination) { |
XEvent event; |
event.xclient.type = ClientMessage; |
event.xclient.window = window; |
- event.xclient.message_type = gdk_x11_get_xatom_by_name_for_display( |
- gdk_display_get_default(), "_NET_WM_DESKTOP"); |
+ event.xclient.message_type = GetAtom("_NET_WM_DESKTOP"); |
event.xclient.format = 32; |
event.xclient.data.l[0] = desktop; |
event.xclient.data.l[1] = 1; // source indication |
@@ -684,8 +700,7 @@ void SetDefaultX11ErrorHandlers() { |
bool IsX11WindowFullScreen(XID window) { |
// First check if _NET_WM_STATE property contains _NET_WM_STATE_FULLSCREEN. |
- static Atom atom = gdk_x11_get_xatom_by_name_for_display( |
- gdk_display_get_default(), "_NET_WM_STATE_FULLSCREEN"); |
+ static Atom atom = GetAtom("_NET_WM_STATE_FULLSCREEN"); |
std::vector<Atom> atom_properties; |
if (GetAtomArrayProperty(window, |
@@ -695,6 +710,7 @@ bool IsX11WindowFullScreen(XID window) { |
!= atom_properties.end()) |
return true; |
+#if defined(TOOLKIT_USES_GTK) |
// As the last resort, check if the window size is as large as the main |
// screen. |
GdkRectangle monitor_rect; |
@@ -708,6 +724,10 @@ bool IsX11WindowFullScreen(XID window) { |
monitor_rect.y == window_rect.y() && |
monitor_rect.width == window_rect.width() && |
monitor_rect.height == window_rect.height(); |
+#else |
+ NOTIMPLEMENTED(); |
+ return false; |
+#endif |
} |
// ---------------------------------------------------------------------------- |