OLD | NEW |
---|---|
1 // Copyright (c) 2009 The Chromium Authors. All rights reserved. | 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 | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "views/screen.h" | 5 #include "views/screen.h" |
6 | 6 |
7 #include <gdk/gdkx.h> | |
7 #include <gtk/gtk.h> | 8 #include <gtk/gtk.h> |
8 | 9 |
9 #include "base/logging.h" | 10 #include "base/logging.h" |
10 | 11 |
11 namespace views { | 12 namespace views { |
12 | 13 |
13 // static | 14 // static |
14 gfx::Point Screen::GetCursorScreenPoint() { | 15 gfx::Point Screen::GetCursorScreenPoint() { |
15 gint x, y; | 16 gint x, y; |
16 gdk_display_get_pointer(gdk_display_get_default(), NULL, &x, &y, NULL); | 17 gdk_display_get_pointer(gdk_display_get_default(), NULL, &x, &y, NULL); |
17 return gfx::Point(x, y); | 18 return gfx::Point(x, y); |
18 } | 19 } |
19 | 20 |
20 gfx::Rect static GetPrimaryMonitorBounds() { | 21 gfx::Rect static GetPrimaryMonitorBounds() { |
21 guchar* raw_data = NULL; | 22 guchar* raw_data = NULL; |
22 gint data_len = 0; | 23 gint data_len = 0; |
23 gboolean success = gdk_property_get(gdk_get_default_root_window(), | 24 gboolean success = gdk_property_get(gdk_get_default_root_window(), |
24 gdk_atom_intern("_NET_WORKAREA", FALSE), | 25 gdk_atom_intern("_NET_WORKAREA", FALSE), |
25 gdk_atom_intern("CARDINAL", FALSE), | 26 gdk_atom_intern("CARDINAL", FALSE), |
26 0, 0xFF, false, NULL, NULL, &data_len, | 27 0, 0xFF, false, NULL, NULL, &data_len, |
27 &raw_data); | 28 &raw_data); |
29 int top_left_x = 0; | |
30 int top_left_y = 0; | |
31 int width = 0; | |
32 int height = 0; | |
33 | |
34 if (success) { | |
35 glong* data = reinterpret_cast<glong*>(raw_data); | |
36 top_left_x = data[0]; | |
37 top_left_y = data[1]; | |
38 width = data[2]; | |
39 height = data[3]; | |
40 } else { | |
41 #if defined(OS_LINUX) | |
sky
2009/12/09 16:34:34
This file is only compiled on linux, so no need fo
Chris Masone
2009/12/09 17:09:50
fixed and committed
| |
42 // If there's no window manager, we can ask X for Monitor info directly. | |
43 XWindowAttributes attributes; | |
44 Status status = XGetWindowAttributes(gdk_x11_get_default_xdisplay(), | |
45 gdk_x11_get_default_root_xwindow(), | |
46 &attributes); | |
47 if (status) { | |
48 top_left_x = attributes.x; | |
49 top_left_y = attributes.y; | |
50 width = attributes.width; | |
51 height = attributes.height; | |
52 success = true; | |
53 } | |
54 #endif | |
55 } | |
28 DCHECK(success); | 56 DCHECK(success); |
29 glong* data = reinterpret_cast<glong*>(raw_data); | 57 return gfx::Rect(top_left_x, top_left_y, width, height); |
30 return gfx::Rect(data[0], data[1], data[0] + data[2], data[1] + data[3]); | |
31 } | 58 } |
32 | 59 |
33 // static | 60 // static |
34 gfx::Rect Screen::GetMonitorWorkAreaNearestWindow(gfx::NativeView view) { | 61 gfx::Rect Screen::GetMonitorWorkAreaNearestWindow(gfx::NativeView view) { |
35 // TODO(beng): use |view|. | 62 // TODO(beng): use |view|. |
36 return GetPrimaryMonitorBounds(); | 63 return GetPrimaryMonitorBounds(); |
37 } | 64 } |
38 | 65 |
39 // static | 66 // static |
40 gfx::Rect Screen::GetMonitorAreaNearestWindow(gfx::NativeView view) { | 67 gfx::Rect Screen::GetMonitorAreaNearestWindow(gfx::NativeView view) { |
(...skipping 26 matching lines...) Expand all Loading... | |
67 gdk_window_get_user_data(window, &data); | 94 gdk_window_get_user_data(window, &data); |
68 GtkWidget* widget = reinterpret_cast<GtkWidget*>(data); | 95 GtkWidget* widget = reinterpret_cast<GtkWidget*>(data); |
69 if (!widget) | 96 if (!widget) |
70 return NULL; | 97 return NULL; |
71 widget = gtk_widget_get_toplevel(widget); | 98 widget = gtk_widget_get_toplevel(widget); |
72 return GTK_IS_WINDOW(widget) ? GTK_WINDOW(widget) : NULL; | 99 return GTK_IS_WINDOW(widget) ? GTK_WINDOW(widget) : NULL; |
73 } | 100 } |
74 | 101 |
75 } // namespace | 102 } // namespace |
76 | 103 |
OLD | NEW |