summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorsky@google.com <sky@google.com@0039d316-1c4b-4281-b951-d872f2087c98>2009-02-28 00:41:27 +0000
committersky@google.com <sky@google.com@0039d316-1c4b-4281-b951-d872f2087c98>2009-02-28 00:41:27 +0000
commit5f2731c58384eb8b4b5102865dedbe9ade800d8a (patch)
tree77b8ff1862e478f7a22931c97047653a5cff90e0
parent4829cfadb745f47c441c709475e5f33a2b26d831 (diff)
downloadchromium_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.cc6
-rw-r--r--chrome/browser/browser_window.h3
-rw-r--r--chrome/browser/cocoa/browser_window_cocoa.h1
-rw-r--r--chrome/browser/cocoa/browser_window_cocoa.mm4
-rw-r--r--chrome/browser/gtk/browser_window_gtk.cc5
-rw-r--r--chrome/browser/gtk/browser_window_gtk.h2
-rw-r--r--chrome/browser/views/frame/browser_view.cc4
-rw-r--r--chrome/browser/views/frame/browser_view.h1
-rw-r--r--chrome/browser/views/info_bubble.cc10
-rw-r--r--chrome/browser/views/info_bubble.h2
-rw-r--r--chrome/test/test_browser_window.h1
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; }