diff options
author | sky@chromium.org <sky@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-11-30 20:53:24 +0000 |
---|---|---|
committer | sky@chromium.org <sky@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-11-30 20:53:24 +0000 |
commit | fc88d33d2850a2aa30018dea93db021b2408c342 (patch) | |
tree | 4c8ae35975d97d4809da6f526f0264efb693b80f /views | |
parent | 644bdcae0edf0cfa3ac9644edf3b52a0d3162489 (diff) | |
download | chromium_src-fc88d33d2850a2aa30018dea93db021b2408c342.zip chromium_src-fc88d33d2850a2aa30018dea93db021b2408c342.tar.gz chromium_src-fc88d33d2850a2aa30018dea93db021b2408c342.tar.bz2 |
Makes sure gtk menus fit on screen before showing them.
BUG=none
TEST=none
Review URL: http://codereview.chromium.org/434106
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@33328 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'views')
-rw-r--r-- | views/controls/menu/native_menu_gtk.cc | 16 |
1 files changed, 12 insertions, 4 deletions
diff --git a/views/controls/menu/native_menu_gtk.cc b/views/controls/menu/native_menu_gtk.cc index 42284f9..f3e303b 100644 --- a/views/controls/menu/native_menu_gtk.cc +++ b/views/controls/menu/native_menu_gtk.cc @@ -258,14 +258,22 @@ void NativeMenuGtk::MenuPositionFunc(GtkMenu* menu, gboolean* push_in, void* data) { Position* position = reinterpret_cast<Position*>(data); + + GtkRequisition menu_req; + gtk_widget_size_request(GTK_WIDGET(menu), &menu_req); + // TODO(beng): RTL *x = position->point.x(); *y = position->point.y(); - if (position->alignment == Menu2::ALIGN_TOPRIGHT) { - GtkRequisition menu_req; - gtk_widget_size_request(GTK_WIDGET(menu), &menu_req); + if (position->alignment == Menu2::ALIGN_TOPRIGHT) *x -= menu_req.width; - } + + // Make sure the popup fits on screen. + GdkScreen* screen = gtk_widget_get_screen(GTK_WIDGET(menu)); + *x = std::max(0, std::min(gdk_screen_get_width(screen) - menu_req.width, *x)); + *y = std::max(0, std::min(gdk_screen_get_height(screen) - menu_req.height, + *y)); + *push_in = FALSE; } |