summaryrefslogtreecommitdiffstats
path: root/chrome/browser/chromeos/compact_location_bar_view.cc
diff options
context:
space:
mode:
Diffstat (limited to 'chrome/browser/chromeos/compact_location_bar_view.cc')
-rw-r--r--chrome/browser/chromeos/compact_location_bar_view.cc88
1 files changed, 84 insertions, 4 deletions
diff --git a/chrome/browser/chromeos/compact_location_bar_view.cc b/chrome/browser/chromeos/compact_location_bar_view.cc
index 9f7c066..af803e4 100644
--- a/chrome/browser/chromeos/compact_location_bar_view.cc
+++ b/chrome/browser/chromeos/compact_location_bar_view.cc
@@ -8,8 +8,10 @@
#include <algorithm>
#include "app/l10n_util.h"
+#include "app/drag_drop_types.h"
#include "app/resource_bundle.h"
#include "chrome/app/chrome_dll_resource.h"
+#include "chrome/browser/bookmarks/bookmark_drag_data.h"
#include "chrome/browser/bookmarks/bookmark_model.h"
#include "chrome/browser/autocomplete/autocomplete_edit_view_gtk.h"
#include "chrome/browser/browser_list.h"
@@ -22,6 +24,7 @@
#include "chrome/browser/views/browser_actions_container.h"
#include "chrome/browser/views/event_utils.h"
#include "chrome/browser/views/frame/browser_view.h"
+#include "chrome/browser/views/toolbar_star_toggle.h"
#include "gfx/canvas.h"
#include "gfx/point.h"
#include "grit/chromium_strings.h"
@@ -30,10 +33,12 @@
#include "views/background.h"
#include "views/controls/button/image_button.h"
#include "views/controls/native/native_view_host.h"
+#include "views/drag_utils.h"
#include "views/widget/widget.h"
#include "views/window/window.h"
namespace chromeos {
+const int kAutocompletePopupWidth = 700;
const int kDefaultLocationEntryWidth = 250;
const int kCompactLocationLeftMargin = 5;
const int kCompactLocationRightMargin = 10;
@@ -46,7 +51,8 @@ const int kWidgetsSeparatorWidth = 2;
CompactLocationBarView::CompactLocationBarView(CompactLocationBarHost* host)
: DropdownBarView(host),
reload_(NULL),
- browser_actions_(NULL) {
+ browser_actions_(NULL),
+ star_(NULL) {
SetFocusable(true);
}
@@ -95,7 +101,7 @@ void CompactLocationBarView::Init() {
reload_->SetImage(views::CustomButton::BS_PUSHED,
tp->GetBitmapNamed(IDR_RELOAD_P));
reload_->SetBackground(color, background,
- tp->GetBitmapNamed(IDR_RELOAD_MASK));
+ tp->GetBitmapNamed(IDR_BUTTON_MASK));
AddChildView(reload_);
@@ -114,6 +120,14 @@ void CompactLocationBarView::Init() {
location_entry_view_->set_focus_view(this);
location_entry_view_->Attach(location_entry_->GetNativeView());
+ star_ = new ToolbarStarToggle(this);
+ star_->SetDragController(this);
+ star_->set_profile(browser()->profile());
+ star_->set_host_view(this);
+ star_->set_bubble_positioner(this);
+ star_->Init();
+ AddChildView(star_);
+
location_entry_->Update(browser()->GetSelectedTabContents());
// Note: we tell the BrowserActionsContainer not to save its size because
@@ -131,12 +145,15 @@ gfx::Size CompactLocationBarView::GetPreferredSize() {
return gfx::Size(); // Not initialized yet, do nothing.
gfx::Size reload_size = reload_->GetPreferredSize();
+ gfx::Size star_size = star_->GetPreferredSize();
gfx::Size location_size = location_entry_view_->GetPreferredSize();
gfx::Size ba_size = browser_actions_->GetPreferredSize();
- int width = kCompactLocationLeftMargin + reload_size.width() +
+ int width =
+ reload_size.width() + kEntryLeftMargin + star_size.width() +
std::max(kDefaultLocationEntryWidth,
location_entry_view_->GetPreferredSize().width()) +
ba_size.width() +
+ kCompactLocationLeftMargin +
kCompactLocationRightMargin;
return gfx::Size(width, kDefaultLocationBarHeight);
}
@@ -151,7 +168,12 @@ void CompactLocationBarView::Layout() {
int reload_y = (height() - reload_size.height()) / 2;
reload_->SetBounds(cur_x, reload_y,
reload_size.width(), reload_size.height());
- cur_x += reload_size.width();
+ cur_x += reload_size.width() + kEntryLeftMargin;
+
+ gfx::Size star_size = star_->GetPreferredSize();
+ int star_y = (height() - star_size.height()) / 2;
+ star_->SetBounds(cur_x, star_y, star_size.width(), star_size.height());
+ cur_x += star_size.width();
gfx::Size ba_size = browser_actions_->GetPreferredSize();
int ba_y = (height() - ba_size.height()) / 2;
@@ -245,4 +267,62 @@ std::wstring CompactLocationBarView::GetTitle() const {
return std::wstring();
}
+////////////////////////////////////////////////////////////////////////////////
+// BubblePositioner overrides:
+gfx::Rect CompactLocationBarView::GetLocationStackBounds() const {
+ gfx::Point lower_left(0, height());
+ ConvertPointToScreen(this, &lower_left);
+ gfx::Rect popup = gfx::Rect(lower_left.x(), lower_left.y(),
+ kAutocompletePopupWidth, 0);
+ return popup.AdjustToFit(GetWidget()->GetWindow()->GetBounds());
+}
+
+////////////////////////////////////////////////////////////////////////////////
+// views::DragController overrides:
+void CompactLocationBarView::WriteDragData(views::View* sender,
+ const gfx::Point& press_pt,
+ OSExchangeData* data) {
+ DCHECK(GetDragOperations(sender, press_pt) != DragDropTypes::DRAG_NONE);
+
+ UserMetrics::RecordAction(UserMetricsAction("CompactLocationBar_DragStar"),
+ browser()->profile());
+
+ // If there is a bookmark for the URL, add the bookmark drag data for it. We
+ // do this to ensure the bookmark is moved, rather than creating an new
+ // bookmark.
+ TabContents* tab = browser()->GetSelectedTabContents();
+ if (tab) {
+ Profile* profile = browser()->profile();
+ if (profile && profile->GetBookmarkModel()) {
+ const BookmarkNode* node = profile->GetBookmarkModel()->
+ GetMostRecentlyAddedNodeForURL(tab->GetURL());
+ if (node) {
+ BookmarkDragData bookmark_data(node);
+ bookmark_data.Write(profile, data);
+ }
+ }
+
+ drag_utils::SetURLAndDragImage(tab->GetURL(),
+ UTF16ToWideHack(tab->GetTitle()),
+ tab->GetFavIcon(),
+ data);
+ }
+}
+
+int CompactLocationBarView::GetDragOperations(views::View* sender,
+ const gfx::Point& p) {
+ DCHECK(sender == star_);
+ TabContents* tab = browser()->GetSelectedTabContents();
+ if (!tab || !tab->ShouldDisplayURL() || !tab->GetURL().is_valid()) {
+ return DragDropTypes::DRAG_NONE;
+ }
+ Profile* profile = browser()->profile();
+ if (profile && profile->GetBookmarkModel() &&
+ profile->GetBookmarkModel()->IsBookmarked(tab->GetURL())) {
+ return DragDropTypes::DRAG_MOVE | DragDropTypes::DRAG_COPY |
+ DragDropTypes::DRAG_LINK;
+ }
+ return DragDropTypes::DRAG_COPY | DragDropTypes::DRAG_LINK;
+}
+
} // namespace chromeos