summaryrefslogtreecommitdiffstats
path: root/chrome/browser/views
diff options
context:
space:
mode:
authorsky@chromium.org <sky@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2009-06-02 15:17:16 +0000
committersky@chromium.org <sky@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2009-06-02 15:17:16 +0000
commita7859412517983e37dee8fabf398ca27701c5ad0 (patch)
tree40dfc13819789b8daa3729219022e45babbab704 /chrome/browser/views
parentf67131a62cfde0397fe4f442fdf7aa4925986c73 (diff)
downloadchromium_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.cc18
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))