summaryrefslogtreecommitdiffstats
path: root/views
diff options
context:
space:
mode:
Diffstat (limited to 'views')
-rw-r--r--views/controls/button/menu_button.cc4
-rw-r--r--views/screen.h4
-rw-r--r--views/screen_gtk.cc11
-rw-r--r--views/view.h3
-rw-r--r--views/window/window_gtk.cc2
5 files changed, 15 insertions, 9 deletions
diff --git a/views/controls/button/menu_button.cc b/views/controls/button/menu_button.cc
index 7f1daf7..5dc59cb 100644
--- a/views/controls/button/menu_button.cc
+++ b/views/controls/button/menu_button.cc
@@ -103,13 +103,13 @@ void MenuButton::Paint(gfx::Canvas* canvas, bool for_drag) {
////////////////////////////////////////////////////////////////////////////////
int MenuButton::GetMaximumScreenXCoordinate() {
- if (!GetWindow()) {
+ if (!GetWidget()) {
NOTREACHED();
return 0;
}
gfx::Rect monitor_bounds =
- Screen::GetMonitorWorkAreaNearestWindow(GetWindow()->GetNativeWindow());
+ Screen::GetMonitorWorkAreaNearestWindow(GetWidget()->GetNativeView());
return monitor_bounds.right() - 1;
}
diff --git a/views/screen.h b/views/screen.h
index 0c0d940..f7c023c 100644
--- a/views/screen.h
+++ b/views/screen.h
@@ -19,10 +19,10 @@ class Screen {
static gfx::Point GetCursorScreenPoint();
// Returns the work area of the monitor nearest the specified window.
- static gfx::Rect GetMonitorWorkAreaNearestWindow(gfx::NativeWindow window);
+ static gfx::Rect GetMonitorWorkAreaNearestWindow(gfx::NativeView view);
// Returns the bounds of the monitor nearest the specified window.
- static gfx::Rect GetMonitorAreaNearestWindow(gfx::NativeWindow window);
+ static gfx::Rect GetMonitorAreaNearestWindow(gfx::NativeView view);
// Returns the monitor area (not the work area, but the complete bounds) of
// the monitor nearest the specified point.
diff --git a/views/screen_gtk.cc b/views/screen_gtk.cc
index dea117c..9302853 100644
--- a/views/screen_gtk.cc
+++ b/views/screen_gtk.cc
@@ -31,16 +31,19 @@ gfx::Rect static GetPrimaryMonitorBounds() {
}
// static
-gfx::Rect Screen::GetMonitorWorkAreaNearestWindow(gfx::NativeWindow window) {
- // TODO(beng): use |window|.
+gfx::Rect Screen::GetMonitorWorkAreaNearestWindow(gfx::NativeView view) {
+ // TODO(beng): use |view|.
return GetPrimaryMonitorBounds();
}
// static
-gfx::Rect Screen::GetMonitorAreaNearestWindow(gfx::NativeWindow window) {
+gfx::Rect Screen::GetMonitorAreaNearestWindow(gfx::NativeView view) {
+ GtkWidget* top_level = gtk_widget_get_toplevel(view);
+ DCHECK(GTK_IS_WINDOW(top_level));
+ GtkWindow* window = GTK_WINDOW(top_level);
GdkScreen* screen = gtk_window_get_screen(window);
gint monitor_num = gdk_screen_get_monitor_at_window(screen,
- (GTK_WIDGET(window))->window);
+ top_level->window);
GdkRectangle bounds;
gdk_screen_get_monitor_geometry(screen, monitor_num, &bounds);
return gfx::Rect(bounds);
diff --git a/views/view.h b/views/view.h
index cb44e2a..dd7662b 100644
--- a/views/view.h
+++ b/views/view.h
@@ -428,6 +428,9 @@ class View : public AcceleratorTarget {
virtual Widget* GetWidget() const;
// Gets the Widget that most closely contains this View, if any.
+ // NOTE: almost all views displayed on screen have a Widget, but not
+ // necessarily a Window. This is due to widgets being able to create top
+ // level windows (as is done for popups, bubbles and menus).
virtual Window* GetWindow() const;
// Get the containing RootView
diff --git a/views/window/window_gtk.cc b/views/window/window_gtk.cc
index 8f64a5b3..a3a3192 100644
--- a/views/window/window_gtk.cc
+++ b/views/window/window_gtk.cc
@@ -442,7 +442,7 @@ void WindowGtk::SizeWindowToDefault(GtkWindow* parent) {
center_rect = gfx::Rect(parent_x, parent_y, parent_w, parent_h);
} else {
// We have no parent window, center over the screen.
- center_rect = Screen::GetMonitorWorkAreaNearestWindow(GetNativeWindow());
+ center_rect = Screen::GetMonitorWorkAreaNearestWindow(GetNativeView());
}
gfx::Size size = non_client_view_->GetPreferredSize();
gfx::Rect bounds(center_rect.x() + (center_rect.width() - size.width()) / 2,