diff options
author | sky@chromium.org <sky@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-06-02 15:17:16 +0000 |
---|---|---|
committer | sky@chromium.org <sky@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-06-02 15:17:16 +0000 |
commit | a7859412517983e37dee8fabf398ca27701c5ad0 (patch) | |
tree | 40dfc13819789b8daa3729219022e45babbab704 /chrome/browser/views | |
parent | f67131a62cfde0397fe4f442fdf7aa4925986c73 (diff) | |
download | chromium_src-a7859412517983e37dee8fabf398ca27701c5ad0.zip chromium_src-a7859412517983e37dee8fabf398ca27701c5ad0.tar.gz chromium_src-a7859412517983e37dee8fabf398ca27701c5ad0.tar.bz2 |
Fixes a couple of bugs encountered in getting info bubbles to work:
. Initial bounds of windows weren't being set.
. Widgets were created initially shown. This was bad for windows as
the window would end up showing prematurely.
. WindowGtk::window_state_ wasn't being initialized.
. And then actual InfoBubble stuff: properly init the bubble, show it
and position it on the monitor.
BUG=none
TEST=none
Review URL: http://codereview.chromium.org/118102
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@17401 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/browser/views')
-rw-r--r-- | chrome/browser/views/info_bubble.cc | 18 |
1 files changed, 8 insertions, 10 deletions
diff --git a/chrome/browser/views/info_bubble.cc b/chrome/browser/views/info_bubble.cc index 2f7091f..908aa54 100644 --- a/chrome/browser/views/info_bubble.cc +++ b/chrome/browser/views/info_bubble.cc @@ -9,6 +9,7 @@ #include "app/resource_bundle.h" #include "chrome/browser/browser_window.h" #include "chrome/browser/views/frame/browser_view.h" +#include "chrome/browser/window_sizer.h" #include "chrome/common/notification_service.h" #include "chrome/common/notification_type.h" #include "grit/theme_resources.h" @@ -16,7 +17,6 @@ #include "views/window/window.h" #if defined(OS_WIN) -#include "app/win_util.h" #include "base/win_util.h" #endif @@ -83,7 +83,7 @@ InfoBubble* InfoBubble::Show(views::Window* parent, #if defined(OS_WIN) window->ShowWindow(SW_SHOW); #else - NOTREACHED(); + static_cast<WidgetGtk*>(window)->Show(); #endif return window; } @@ -134,6 +134,8 @@ void InfoBubble::Init(views::Window* parent, #if defined(OS_WIN) WidgetWin::Init(parent->GetNativeWindow(), bounds, true); +#else + WidgetGtk::Init(GTK_WIDGET(parent->GetNativeWindow()), bounds, true); #endif SetContentsView(content_view_); // The preferred size may differ when parented. Ask for the bounds again @@ -148,8 +150,6 @@ void InfoBubble::Init(views::Window* parent, SWP_NOACTIVATE | SWP_NOREDRAW | SWP_NOZORDER); // Invoke ChangeSize, otherwise layered window isn't updated correctly. ChangeSize(0, CSize(parented_bounds.width(), parented_bounds.height())); -#else - NOTIMPLEMENTED(); #endif } @@ -254,12 +254,10 @@ InfoBubble::ContentView::ContentView(views::View* content, InfoBubble* host) gfx::Rect InfoBubble::ContentView::CalculateWindowBoundsAndAjust( const gfx::Rect& position_relative_to) { -#if defined(OS_WIN) - gfx::Rect monitor_bounds = win_util::GetMonitorBoundsForRect( - position_relative_to); -#else - gfx::Rect monitor_bounds; -#endif + scoped_ptr<WindowSizer::MonitorInfoProvider> monitor_provider( + WindowSizer::CreateDefaultMonitorInfoProvider()); + gfx::Rect monitor_bounds( + monitor_provider->GetMonitorWorkAreaMatching(position_relative_to)); // Calculate the bounds using TOP_LEFT (the default). gfx::Rect window_bounds = CalculateWindowBounds(position_relative_to); if (monitor_bounds.IsEmpty() || monitor_bounds.Contains(window_bounds)) |