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 "chrome/browser/window_sizer.h" | 5 #include "chrome/browser/window_sizer.h" |
6 | 6 |
7 #include <gtk/gtk.h> | 7 #include <gtk/gtk.h> |
8 | 8 |
9 #include "base/logging.h" | 9 #include "base/logging.h" |
10 #include "chrome/browser/browser.h" | 10 #include "chrome/browser/browser.h" |
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
51 void UpdateWorkAreas() { | 51 void UpdateWorkAreas() { |
52 // TODO(thestig) Implement multi-monitor support. | 52 // TODO(thestig) Implement multi-monitor support. |
53 work_areas_.clear(); | 53 work_areas_.clear(); |
54 work_areas_.push_back(GetPrimaryMonitorBounds()); | 54 work_areas_.push_back(GetPrimaryMonitorBounds()); |
55 } | 55 } |
56 | 56 |
57 private: | 57 private: |
58 // Get the available screen space as a gfx::Rect, or return false if | 58 // Get the available screen space as a gfx::Rect, or return false if |
59 // if it's unavailable (i.e. the window manager doesn't support | 59 // if it's unavailable (i.e. the window manager doesn't support |
60 // retrieving this). | 60 // retrieving this). |
| 61 // TODO(thestig) Use _NET_CURRENT_DESKTOP here as well? |
61 bool GetScreenWorkArea(gfx::Rect* out_rect) const { | 62 bool GetScreenWorkArea(gfx::Rect* out_rect) const { |
62 gboolean ok; | 63 gboolean ok; |
63 guchar* raw_data = NULL; | 64 guchar* raw_data = NULL; |
64 gint data_len = 0; | 65 gint data_len = 0; |
65 ok = gdk_property_get(gdk_get_default_root_window(), // a gdk window | 66 ok = gdk_property_get(gdk_get_default_root_window(), // a gdk window |
66 gdk_atom_intern("_NET_WORKAREA", FALSE), // property | 67 gdk_atom_intern("_NET_WORKAREA", FALSE), // property |
67 gdk_atom_intern("CARDINAL", FALSE), // property type | 68 gdk_atom_intern("CARDINAL", FALSE), // property type |
68 0, // byte offset into property | 69 0, // byte offset into property |
69 0xff, // property length to retrieve | 70 0xff, // property length to retrieve |
70 false, // delete property after retrieval? | 71 false, // delete property after retrieval? |
71 NULL, // returned property type | 72 NULL, // returned property type |
72 NULL, // returned data format | 73 NULL, // returned data format |
73 &data_len, // returned data len | 74 &data_len, // returned data len |
74 &raw_data); // returned data | 75 &raw_data); // returned data |
75 if (!ok) | 76 if (!ok) |
76 return false; | 77 return false; |
77 | 78 |
78 // We expect to get four longs back: x1, y1, x2, y2. | 79 // We expect to get four longs back: x1, y1, x2, y2. |
79 if (data_len != 4 * sizeof(glong)) { | 80 if (data_len < static_cast<gint>(4 * sizeof(glong))) { |
80 NOTREACHED(); | 81 NOTREACHED(); |
81 g_free(raw_data); | 82 g_free(raw_data); |
82 return false; | 83 return false; |
83 } | 84 } |
84 | 85 |
85 glong* data = reinterpret_cast<glong*>(raw_data); | 86 glong* data = reinterpret_cast<glong*>(raw_data); |
86 gint x = data[0]; | 87 gint x = data[0]; |
87 gint y = data[1]; | 88 gint y = data[1]; |
88 gint width = data[0] + data[2]; | 89 gint width = data[0] + data[2]; |
89 gint height = data[1] + data[3]; | 90 gint height = data[1] + data[3]; |
90 g_free(raw_data); | 91 g_free(raw_data); |
91 | 92 |
92 out_rect->SetRect(x, y, width, height); | 93 out_rect->SetRect(x, y, width, height); |
93 return true; | 94 return true; |
94 } | 95 } |
95 | 96 |
96 DISALLOW_COPY_AND_ASSIGN(DefaultMonitorInfoProvider); | 97 DISALLOW_COPY_AND_ASSIGN(DefaultMonitorInfoProvider); |
97 }; | 98 }; |
98 | 99 |
99 // static | 100 // static |
100 WindowSizer::MonitorInfoProvider* | 101 WindowSizer::MonitorInfoProvider* |
101 WindowSizer::CreateDefaultMonitorInfoProvider() { | 102 WindowSizer::CreateDefaultMonitorInfoProvider() { |
102 return new DefaultMonitorInfoProvider(); | 103 return new DefaultMonitorInfoProvider(); |
103 } | 104 } |
OLD | NEW |