summaryrefslogtreecommitdiffstats
path: root/chrome
diff options
context:
space:
mode:
Diffstat (limited to 'chrome')
-rw-r--r--chrome/browser/browser.cc5
-rw-r--r--chrome/browser/browser_window.h3
-rw-r--r--chrome/browser/browser_window_cocoa.h1
-rw-r--r--chrome/browser/browser_window_cocoa.mm5
-rw-r--r--chrome/browser/gtk/browser_window_gtk.cc5
-rw-r--r--chrome/browser/gtk/browser_window_gtk.h1
-rw-r--r--chrome/browser/views/bookmark_bubble_view.cc27
-rw-r--r--chrome/browser/views/bookmark_bubble_view.h7
-rw-r--r--chrome/browser/views/frame/browser_view.cc7
-rw-r--r--chrome/browser/views/frame/browser_view.h1
-rw-r--r--chrome/browser/views/location_bar_view.cc8
-rw-r--r--chrome/browser/views/toolbar_star_toggle.cc14
-rw-r--r--chrome/browser/views/toolbar_star_toggle.h5
-rw-r--r--chrome/browser/views/toolbar_view.cc5
-rw-r--r--chrome/test/test_browser_window.h1
15 files changed, 45 insertions, 50 deletions
diff --git a/chrome/browser/browser.cc b/chrome/browser/browser.cc
index 147374e..0fc5f33 100644
--- a/chrome/browser/browser.cc
+++ b/chrome/browser/browser.cc
@@ -737,8 +737,7 @@ void Browser::BookmarkCurrentPage() {
return;
model->SetURLStarred(url, entry->title(), true);
- if (!window_->IsBookmarkBubbleVisible())
- window_->ShowBookmarkBubble(url, model->IsBookmarked(url));
+ window_->ShowBookmarkBubble(url, model->IsBookmarked(url));
}
void Browser::ViewSource() {
@@ -2047,7 +2046,7 @@ void Browser::UpdateCommandsForTabState() {
bool is_web_contents = web_contents != NULL;
// Page-related commands
- // Only allow bookmarking for tabbed browsers.
+ // Only allow bookmarking for web content in normal windows.
command_updater_.UpdateCommandEnabled(IDC_STAR,
is_web_contents && (type() == TYPE_NORMAL));
window_->SetStarredState(is_web_contents && web_contents->is_starred());
diff --git a/chrome/browser/browser_window.h b/chrome/browser/browser_window.h
index 6a1215f..be21a1a 100644
--- a/chrome/browser/browser_window.h
+++ b/chrome/browser/browser_window.h
@@ -129,9 +129,6 @@ class BrowserWindow {
// Shows the Bookmark Manager window.
virtual void ShowBookmarkManager() = 0;
- // Returns true if the Bookmark bubble is visible.
- virtual bool IsBookmarkBubbleVisible() const = 0;
-
// Shows the Bookmark bubble. |url| is the URL being bookmarked,
// |already_bookmarked| is true if the url is already bookmarked.
virtual void ShowBookmarkBubble(const GURL& url, bool already_bookmarked) = 0;
diff --git a/chrome/browser/browser_window_cocoa.h b/chrome/browser/browser_window_cocoa.h
index d3fc035..1f7f59b 100644
--- a/chrome/browser/browser_window_cocoa.h
+++ b/chrome/browser/browser_window_cocoa.h
@@ -48,7 +48,6 @@ class BrowserWindowCocoa : public BrowserWindow {
virtual void ToggleBookmarkBar();
virtual void ShowAboutChromeDialog();
virtual void ShowBookmarkManager();
- virtual bool IsBookmarkBubbleVisible() const;
virtual void ShowBookmarkBubble(const GURL& url, bool already_bookmarked);
virtual void ShowReportBugDialog();
virtual void ShowClearBrowsingDataDialog();
diff --git a/chrome/browser/browser_window_cocoa.mm b/chrome/browser/browser_window_cocoa.mm
index bbf6735..baee161 100644
--- a/chrome/browser/browser_window_cocoa.mm
+++ b/chrome/browser/browser_window_cocoa.mm
@@ -144,11 +144,6 @@ void BrowserWindowCocoa::ShowBookmarkManager() {
NOTIMPLEMENTED();
}
-bool BrowserWindowCocoa::IsBookmarkBubbleVisible() const {
- NOTIMPLEMENTED();
- return false;
-}
-
void BrowserWindowCocoa::ShowBookmarkBubble(const GURL& url,
bool already_bookmarked) {
NOTIMPLEMENTED();
diff --git a/chrome/browser/gtk/browser_window_gtk.cc b/chrome/browser/gtk/browser_window_gtk.cc
index a6794bc..36e8e59 100644
--- a/chrome/browser/gtk/browser_window_gtk.cc
+++ b/chrome/browser/gtk/browser_window_gtk.cc
@@ -278,11 +278,6 @@ void BrowserWindowGtk::ShowBookmarkManager() {
NOTIMPLEMENTED();
}
-bool BrowserWindowGtk::IsBookmarkBubbleVisible() const {
- NOTIMPLEMENTED();
- return false;
-}
-
void BrowserWindowGtk::ShowBookmarkBubble(const GURL& url,
bool already_bookmarked) {
NOTIMPLEMENTED();
diff --git a/chrome/browser/gtk/browser_window_gtk.h b/chrome/browser/gtk/browser_window_gtk.h
index 302ba4a..fc15e15 100644
--- a/chrome/browser/gtk/browser_window_gtk.h
+++ b/chrome/browser/gtk/browser_window_gtk.h
@@ -52,7 +52,6 @@ class BrowserWindowGtk : public BrowserWindow {
virtual void ToggleBookmarkBar();
virtual void ShowAboutChromeDialog();
virtual void ShowBookmarkManager();
- virtual bool IsBookmarkBubbleVisible() const;
virtual void ShowBookmarkBubble(const GURL& url, bool already_bookmarked);
virtual void ShowReportBugDialog();
virtual void ShowClearBrowsingDataDialog();
diff --git a/chrome/browser/views/bookmark_bubble_view.cc b/chrome/browser/views/bookmark_bubble_view.cc
index cd6b9c9..890594d5 100644
--- a/chrome/browser/views/bookmark_bubble_view.cc
+++ b/chrome/browser/views/bookmark_bubble_view.cc
@@ -110,6 +110,8 @@ void BookmarkBubbleView::RecentlyUsedFoldersModel::RemoveNode(
// BookmarkBubbleView ---------------------------------------------------------
+BookmarkBubbleView* BookmarkBubbleView::bubble_ = NULL;
+
// static
void BookmarkBubbleView::Show(HWND parent,
const gfx::Rect& bounds,
@@ -117,15 +119,27 @@ void BookmarkBubbleView::Show(HWND parent,
Profile* profile,
const GURL& url,
bool newly_bookmarked) {
- BookmarkBubbleView* view = new BookmarkBubbleView(delegate, profile, url,
- newly_bookmarked);
- InfoBubble::Show(parent, bounds, view, view);
+ if (IsShowing())
+ return;
+
+ bubble_ = new BookmarkBubbleView(delegate, profile, url, newly_bookmarked);
+ InfoBubble::Show(parent, bounds, bubble_, bubble_);
GURL url_ptr(url);
NotificationService::current()->Notify(
NotificationType::BOOKMARK_BUBBLE_SHOWN,
Source<Profile>(profile->GetOriginalProfile()),
Details<GURL>(&url_ptr));
- view->BubbleShown();
+ bubble_->BubbleShown();
+}
+
+// static
+bool BookmarkBubbleView::IsShowing() {
+ return bubble_ != NULL;
+}
+
+void BookmarkBubbleView::Hide() {
+ if (IsShowing())
+ bubble_->Close();
}
BookmarkBubbleView::~BookmarkBubbleView() {
@@ -317,6 +331,11 @@ void BookmarkBubbleView::InfoBubbleClosing(InfoBubble* info_bubble,
apply_edits_ = false;
}
+ // We have to reset |bubble_| here, not in our destructor, because we'll be
+ // destroyed asynchronously and the shown state will be checked before then.
+ DCHECK(bubble_ == this);
+ bubble_ = NULL;
+
if (delegate_)
delegate_->InfoBubbleClosing(info_bubble, closed_by_escape);
NotificationService::current()->Notify(
diff --git a/chrome/browser/views/bookmark_bubble_view.h b/chrome/browser/views/bookmark_bubble_view.h
index c067f4a..2f0f7c1 100644
--- a/chrome/browser/views/bookmark_bubble_view.h
+++ b/chrome/browser/views/bookmark_bubble_view.h
@@ -40,6 +40,10 @@ class BookmarkBubbleView : public views::View,
const GURL& url,
bool newly_bookmarked);
+ static bool IsShowing();
+
+ static void Hide();
+
virtual ~BookmarkBubbleView();
// Overriden to force a layout.
@@ -121,6 +125,9 @@ class BookmarkBubbleView : public views::View,
// Sets the title and parent of the node.
void ApplyEdits();
+ // The bookmark bubble, if we're showing one.
+ static BookmarkBubbleView* bubble_;
+
// Delegate for the bubble, may be null.
InfoBubbleDelegate* delegate_;
diff --git a/chrome/browser/views/frame/browser_view.cc b/chrome/browser/views/frame/browser_view.cc
index 8a8b2cf..829c294 100644
--- a/chrome/browser/views/frame/browser_view.cc
+++ b/chrome/browser/views/frame/browser_view.cc
@@ -17,6 +17,7 @@
#include "chrome/browser/view_ids.h"
#include "chrome/browser/views/about_chrome_view.h"
#include "chrome/browser/views/bookmark_bar_view.h"
+#include "chrome/browser/views/bookmark_bubble_view.h"
#include "chrome/browser/views/bookmark_manager_view.h"
#include "chrome/browser/views/bug_report_view.h"
#include "chrome/browser/views/clear_browsing_data.h"
@@ -233,6 +234,8 @@ void BrowserView::WindowMoved() {
status_bubble_->Reposition();
+ BookmarkBubbleView::Hide();
+
// Close the omnibox popup, if any.
if (toolbar_->GetLocationBarView())
toolbar_->GetLocationBarView()->location_entry()->ClosePopup();
@@ -695,10 +698,6 @@ void BrowserView::ShowBookmarkManager() {
BookmarkManagerView::Show(browser_->profile());
}
-bool BrowserView::IsBookmarkBubbleVisible() const {
- return toolbar_->star_button()->is_bubble_showing();
-}
-
void BrowserView::ShowBookmarkBubble(const GURL& url, bool already_bookmarked) {
toolbar_->star_button()->ShowStarBubble(url, !already_bookmarked);
}
diff --git a/chrome/browser/views/frame/browser_view.h b/chrome/browser/views/frame/browser_view.h
index bc7aad7..dccd54d 100644
--- a/chrome/browser/views/frame/browser_view.h
+++ b/chrome/browser/views/frame/browser_view.h
@@ -182,7 +182,6 @@ class BrowserView : public BrowserWindow,
virtual void ToggleBookmarkBar();
virtual void ShowAboutChromeDialog();
virtual void ShowBookmarkManager();
- virtual bool IsBookmarkBubbleVisible() const;
virtual void ShowBookmarkBubble(const GURL& url, bool already_bookmarked);
virtual void ShowReportBugDialog();
virtual void ShowClearBrowsingDataDialog();
diff --git a/chrome/browser/views/location_bar_view.cc b/chrome/browser/views/location_bar_view.cc
index 396883c..0ec20a6 100644
--- a/chrome/browser/views/location_bar_view.cc
+++ b/chrome/browser/views/location_bar_view.cc
@@ -211,11 +211,11 @@ void LocationBarView::Paint(ChromeCanvas* canvas) {
const SkBitmap* background =
popup_window_mode_ ? kPopupBackground : kBackground;
- int top_offset = TopOffset();
+ int top_offset = std::min(TopOffset(), height());
canvas->TileImageInt(*background, 0, top_offset, 0, 0, width(), height());
int top_margin = TopMargin();
canvas->FillRectInt(bg, 0, top_margin, width(),
- height() - top_margin - kVertMargin);
+ std::max(height() - top_margin - kVertMargin, 0));
}
bool LocationBarView::CanProcessTabKeyEvents() {
@@ -354,7 +354,7 @@ void LocationBarView::DoLayout(const bool force_layout) {
// TODO(sky): baseline layout.
int location_y = TopMargin();
- int location_height = height() - location_y - kVertMargin;
+ int location_height = std::max(height() - location_y - kVertMargin, 0);
if (info_label_.IsVisible()) {
info_label_.SetBounds(width() - kEntryPadding - info_label_size.width(),
location_y,
@@ -396,7 +396,7 @@ int LocationBarView::TopOffset() const {
}
int LocationBarView::TopMargin() const {
- return kVertMargin - TopOffset();
+ return std::min(kVertMargin - TopOffset(), height());
}
int LocationBarView::TextDisplayWidth() {
diff --git a/chrome/browser/views/toolbar_star_toggle.cc b/chrome/browser/views/toolbar_star_toggle.cc
index e4a017f..420605c 100644
--- a/chrome/browser/views/toolbar_star_toggle.cc
+++ b/chrome/browser/views/toolbar_star_toggle.cc
@@ -29,16 +29,10 @@ static const int64 kDisallowClickMS = 40;
ToolbarStarToggle::ToolbarStarToggle(BrowserToolbarView* host)
: host_(host),
- ignore_click_(false),
- is_bubble_showing_(false) {
+ ignore_click_(false) {
}
void ToolbarStarToggle::ShowStarBubble(const GURL& url, bool newly_bookmarked) {
- if (is_bubble_showing_) {
- // Don't show if we're already showing the bubble.
- return;
- }
-
gfx::Point star_location;
views::View::ConvertPointToScreen(this, &star_location);
// Shift the x location by 1 as visually the center of the star appears 1
@@ -50,7 +44,6 @@ void ToolbarStarToggle::ShowStarBubble(const GURL& url, bool newly_bookmarked) {
reinterpret_cast<HWND>(host_->browser()->window()->GetNativeHandle());
BookmarkBubbleView::Show(parent_hwnd, star_bounds, this, host_->profile(),
url, newly_bookmarked);
- is_bubble_showing_ = true;
}
bool ToolbarStarToggle::OnMousePressed(const views::MouseEvent& e) {
@@ -71,12 +64,12 @@ void ToolbarStarToggle::OnDragDone() {
}
void ToolbarStarToggle::NotifyClick(int mouse_event_flags) {
- if (!ignore_click_ && !is_bubble_showing_)
+ if (!ignore_click_ && !BookmarkBubbleView::IsShowing())
ToggleButton::NotifyClick(mouse_event_flags);
}
SkBitmap ToolbarStarToggle::GetImageToPaint() {
- if (is_bubble_showing_) {
+ if (BookmarkBubbleView::IsShowing()) {
ResourceBundle &rb = ResourceBundle::GetSharedInstance();
return *rb.GetBitmapNamed(IDR_STARRED_P);
}
@@ -85,7 +78,6 @@ SkBitmap ToolbarStarToggle::GetImageToPaint() {
void ToolbarStarToggle::InfoBubbleClosing(InfoBubble* info_bubble,
bool closed_by_escape) {
- is_bubble_showing_ = false;
SchedulePaint();
bubble_closed_time_ = TimeTicks::Now();
}
diff --git a/chrome/browser/views/toolbar_star_toggle.h b/chrome/browser/views/toolbar_star_toggle.h
index 0553894..f9b0a9a 100644
--- a/chrome/browser/views/toolbar_star_toggle.h
+++ b/chrome/browser/views/toolbar_star_toggle.h
@@ -24,8 +24,6 @@ class ToolbarStarToggle : public views::ToggleButton,
// If the bubble isn't showing, shows it.
void ShowStarBubble(const GURL& url, bool newly_bookmarked);
- bool is_bubble_showing() const { return is_bubble_showing_; }
-
// Overridden to update ignore_click_ based on whether the mouse was clicked
// quickly after the bubble was hidden.
virtual bool OnMousePressed(const views::MouseEvent& e);
@@ -57,9 +55,6 @@ class ToolbarStarToggle : public views::ToggleButton,
// the amount of time between when the bubble clicked and now.
bool ignore_click_;
- // Is the bubble showing?
- bool is_bubble_showing_;
-
DISALLOW_EVIL_CONSTRUCTORS(ToolbarStarToggle);
};
diff --git a/chrome/browser/views/toolbar_view.cc b/chrome/browser/views/toolbar_view.cc
index acb64ea..360dc817 100644
--- a/chrome/browser/views/toolbar_view.cc
+++ b/chrome/browser/views/toolbar_view.cc
@@ -265,9 +265,10 @@ void BrowserToolbarView::Layout() {
return;
}
- int child_y = kControlVertOffset;
+ int child_y = std::min(kControlVertOffset, height());
// We assume all child elements are the same height.
- int child_height = go_->GetPreferredSize().height();
+ int child_height =
+ std::min(go_->GetPreferredSize().height(), height() - child_y);
// If the window is maximized, we extend the back button to the left so that
// clicking on the left-most pixel will activate the back button.
diff --git a/chrome/test/test_browser_window.h b/chrome/test/test_browser_window.h
index c3526f7..f474f71 100644
--- a/chrome/test/test_browser_window.h
+++ b/chrome/test/test_browser_window.h
@@ -50,7 +50,6 @@ class TestBrowserWindow : public BrowserWindow {
virtual void ToggleBookmarkBar() {}
virtual void ShowAboutChromeDialog() {}
virtual void ShowBookmarkManager() {}
- virtual bool IsBookmarkBubbleVisible() const { return false; }
virtual void ShowBookmarkBubble(const GURL& url, bool already_bookmarked) {}
virtual void ShowReportBugDialog() {}
virtual void ShowClearBrowsingDataDialog() {}