diff options
author | sky@google.com <sky@google.com@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-02-28 00:41:27 +0000 |
---|---|---|
committer | sky@google.com <sky@google.com@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-02-28 00:41:27 +0000 |
commit | 5f2731c58384eb8b4b5102865dedbe9ade800d8a (patch) | |
tree | 77b8ff1862e478f7a22931c97047653a5cff90e0 | |
parent | 4829cfadb745f47c441c709475e5f33a2b26d831 (diff) | |
download | chromium_src-5f2731c58384eb8b4b5102865dedbe9ade800d8a.zip chromium_src-5f2731c58384eb8b4b5102865dedbe9ade800d8a.tar.gz chromium_src-5f2731c58384eb8b4b5102865dedbe9ade800d8a.tar.bz2 |
Does two changes to appease chrome bot runs:
. Changes InfoBubble to properly initialize all fields in member
initializer list and set the delegate before show on the off chance
the bubble is deleted from show. This should no longer happen after
the second change.
. Only show the bookmark bubble if the browser window is active. I
experimented with conditionally enabling the star and this turns out
to be a bit error prone.
BUG=none
TEST=none
Review URL: http://codereview.chromium.org/31016
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@10659 0039d316-1c4b-4281-b951-d872f2087c98
-rw-r--r-- | chrome/browser/browser.cc | 6 | ||||
-rw-r--r-- | chrome/browser/browser_window.h | 3 | ||||
-rw-r--r-- | chrome/browser/cocoa/browser_window_cocoa.h | 1 | ||||
-rw-r--r-- | chrome/browser/cocoa/browser_window_cocoa.mm | 4 | ||||
-rw-r--r-- | chrome/browser/gtk/browser_window_gtk.cc | 5 | ||||
-rw-r--r-- | chrome/browser/gtk/browser_window_gtk.h | 2 | ||||
-rw-r--r-- | chrome/browser/views/frame/browser_view.cc | 4 | ||||
-rw-r--r-- | chrome/browser/views/frame/browser_view.h | 1 | ||||
-rw-r--r-- | chrome/browser/views/info_bubble.cc | 10 | ||||
-rw-r--r-- | chrome/browser/views/info_bubble.h | 2 | ||||
-rw-r--r-- | chrome/test/test_browser_window.h | 1 |
11 files changed, 34 insertions, 5 deletions
diff --git a/chrome/browser/browser.cc b/chrome/browser/browser.cc index c58b93c..9c6dc3d 100644 --- a/chrome/browser/browser.cc +++ b/chrome/browser/browser.cc @@ -746,7 +746,11 @@ void Browser::BookmarkCurrentPage() { return; model->SetURLStarred(url, entry->title(), true); - window_->ShowBookmarkBubble(url, model->IsBookmarked(url)); + if (window_->IsActive()) { + // Only show the bubble if the window is active, otherwise we may get into + // weird situations were the bubble is deleted as soon as it is shown. + window_->ShowBookmarkBubble(url, model->IsBookmarked(url)); + } } void Browser::SavePage() { diff --git a/chrome/browser/browser_window.h b/chrome/browser/browser_window.h index 8a5ff21..3df4a23 100644 --- a/chrome/browser/browser_window.h +++ b/chrome/browser/browser_window.h @@ -49,6 +49,9 @@ class BrowserWindow { // state if necessary. virtual void Activate() = 0; + // Returns true if the window is currently the active/focused window. + virtual bool IsActive() const = 0; + // Flashes the taskbar item associated with this frame. virtual void FlashFrame() = 0; diff --git a/chrome/browser/cocoa/browser_window_cocoa.h b/chrome/browser/cocoa/browser_window_cocoa.h index d4b3ffb..f3f7056 100644 --- a/chrome/browser/cocoa/browser_window_cocoa.h +++ b/chrome/browser/cocoa/browser_window_cocoa.h @@ -25,6 +25,7 @@ class BrowserWindowCocoa : public BrowserWindow { virtual void SetBounds(const gfx::Rect& bounds); virtual void Close(); virtual void Activate(); + virtual bool IsActive() const; virtual void FlashFrame(); virtual void* GetNativeHandle(); virtual BrowserWindowTesting* GetBrowserWindowTesting(); diff --git a/chrome/browser/cocoa/browser_window_cocoa.mm b/chrome/browser/cocoa/browser_window_cocoa.mm index 9334671..aca8d78 100644 --- a/chrome/browser/cocoa/browser_window_cocoa.mm +++ b/chrome/browser/cocoa/browser_window_cocoa.mm @@ -48,6 +48,10 @@ void BrowserWindowCocoa::FlashFrame() { requestUserAttention:NSInformationalRequest]; } +bool BrowserWindowCocoa::IsActive() const { + return [window_ isKeyWindow]; +} + void* BrowserWindowCocoa::GetNativeHandle() { return [controller_ window]; } diff --git a/chrome/browser/gtk/browser_window_gtk.cc b/chrome/browser/gtk/browser_window_gtk.cc index 6535539..4135c72 100644 --- a/chrome/browser/gtk/browser_window_gtk.cc +++ b/chrome/browser/gtk/browser_window_gtk.cc @@ -204,6 +204,11 @@ void BrowserWindowGtk::Activate() { gtk_window_present(window_); } +bool BrowserWindowGtk::IsActive() const { + NOTIMPLEMENTED(); + return true; +} + void BrowserWindowGtk::FlashFrame() { // May not be respected by all window managers. gtk_window_set_urgency_hint(window_, TRUE); diff --git a/chrome/browser/gtk/browser_window_gtk.h b/chrome/browser/gtk/browser_window_gtk.h index adc1e91..07d3c97 100644 --- a/chrome/browser/gtk/browser_window_gtk.h +++ b/chrome/browser/gtk/browser_window_gtk.h @@ -33,6 +33,7 @@ class BrowserWindowGtk : public BrowserWindow, virtual void SetBounds(const gfx::Rect& bounds); virtual void Close(); virtual void Activate(); + virtual bool IsActive() const; virtual void FlashFrame(); virtual void* GetNativeHandle(); virtual BrowserWindowTesting* GetBrowserWindowTesting(); @@ -120,4 +121,3 @@ class BrowserWindowGtk : public BrowserWindow, }; #endif // CHROME_BROWSER_GTK_BROWSER_WINDOW_GTK_H_ - diff --git a/chrome/browser/views/frame/browser_view.cc b/chrome/browser/views/frame/browser_view.cc index e1341f94..e8cb64a 100644 --- a/chrome/browser/views/frame/browser_view.cc +++ b/chrome/browser/views/frame/browser_view.cc @@ -525,6 +525,10 @@ void BrowserView::Activate() { frame_->GetWindow()->Activate(); } +bool BrowserView::IsActive() const { + return frame_->GetWindow()->IsActive(); +} + void BrowserView::FlashFrame() { FLASHWINFO fwi; fwi.cbSize = sizeof(fwi); diff --git a/chrome/browser/views/frame/browser_view.h b/chrome/browser/views/frame/browser_view.h index ebf4649..0de9e20 100644 --- a/chrome/browser/views/frame/browser_view.h +++ b/chrome/browser/views/frame/browser_view.h @@ -183,6 +183,7 @@ class BrowserView : public BrowserWindow, virtual void SetBounds(const gfx::Rect& bounds); virtual void Close(); virtual void Activate(); + virtual bool IsActive() const; virtual void FlashFrame(); virtual void* GetNativeHandle(); virtual BrowserWindowTesting* GetBrowserWindowTesting(); diff --git a/chrome/browser/views/info_bubble.cc b/chrome/browser/views/info_bubble.cc index 042d908..3ab8ec0 100644 --- a/chrome/browser/views/info_bubble.cc +++ b/chrome/browser/views/info_bubble.cc @@ -73,12 +73,18 @@ InfoBubble* InfoBubble::Show(HWND parent_hwnd, InfoBubble* window = new InfoBubble(); DLOG(WARNING) << "new bubble=" << window; window->Init(parent_hwnd, position_relative_to, content); - window->ShowWindow(SW_SHOW); + // Set the delegate before we show, on the off chance the delegate is needed + // during showing. window->delegate_ = delegate; + window->ShowWindow(SW_SHOW); return window; } -InfoBubble::InfoBubble() : content_view_(NULL), closed_(false) { +InfoBubble::InfoBubble() + : delegate_(NULL), + parent_(NULL), + content_view_(NULL), + closed_(false) { } InfoBubble::~InfoBubble() { diff --git a/chrome/browser/views/info_bubble.h b/chrome/browser/views/info_bubble.h index 4e918425..99d82c6 100644 --- a/chrome/browser/views/info_bubble.h +++ b/chrome/browser/views/info_bubble.h @@ -41,7 +41,7 @@ class InfoBubble : public views::WidgetWin, // Shows the InfoBubble. The InfoBubble is parented to parent_hwnd, contains // the View content and positioned relative to the screen position // position_relative_to. Show takes ownership of content and deletes the - // create InfoBubble when another window is activated. You can explicitly + // created InfoBubble when another window is activated. You can explicitly // close the bubble by invoking Close. A delegate may optionally be provided // to be notified when the InfoBubble is closed and to prevent the InfoBubble // from being closed when the Escape key is pressed (which is the default diff --git a/chrome/test/test_browser_window.h b/chrome/test/test_browser_window.h index e583400..de368ab 100644 --- a/chrome/test/test_browser_window.h +++ b/chrome/test/test_browser_window.h @@ -25,6 +25,7 @@ class TestBrowserWindow : public BrowserWindow { virtual void SetBounds(const gfx::Rect& bounds) {} virtual void Close() {} virtual void Activate() {} + virtual bool IsActive() const { return false; } virtual void FlashFrame() {} virtual void* GetNativeHandle() { return NULL; } virtual BrowserWindowTesting* GetBrowserWindowTesting() { return NULL; } |