summaryrefslogtreecommitdiffstats
path: root/chrome
diff options
context:
space:
mode:
authorerg@google.com <erg@google.com@0039d316-1c4b-4281-b951-d872f2087c98>2010-01-27 18:39:49 +0000
committererg@google.com <erg@google.com@0039d316-1c4b-4281-b951-d872f2087c98>2010-01-27 18:39:49 +0000
commit57b8ac20d2251996c29cd1935ba6a65679a9c149 (patch)
tree11c1e057f1801970b09d91e36e64e9c152e458d9 /chrome
parent4636504633191de33976de1d29aa66647b90f77f (diff)
downloadchromium_src-57b8ac20d2251996c29cd1935ba6a65679a9c149.zip
chromium_src-57b8ac20d2251996c29cd1935ba6a65679a9c149.tar.gz
chromium_src-57b8ac20d2251996c29cd1935ba6a65679a9c149.tar.bz2
gtk: Implements bookmark bar import promotion link, that when clicked imports bookmarks.
Based on this patch: http://codereview.chromium.org/440029 BUG=28754 TEST=manually Review URL: http://codereview.chromium.org/549001 Patch from thiago.farina@gmail.com. git-svn-id: svn://svn.chromium.org/chrome/trunk/src@37275 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome')
-rw-r--r--chrome/browser/gtk/bookmark_bar_gtk.cc28
-rw-r--r--chrome/browser/gtk/bookmark_bar_gtk.h20
-rw-r--r--chrome/browser/gtk/bookmark_bar_instructions_gtk.cc87
-rw-r--r--chrome/browser/gtk/bookmark_bar_instructions_gtk.h56
-rw-r--r--chrome/browser/gtk/browser_window_gtk.cc2
-rw-r--r--chrome/browser/gtk/import_dialog_gtk.cc25
-rw-r--r--chrome/browser/gtk/import_dialog_gtk.h8
-rw-r--r--chrome/browser/gtk/options/content_page_gtk.cc2
-rwxr-xr-xchrome/chrome_browser.gypi2
9 files changed, 190 insertions, 40 deletions
diff --git a/chrome/browser/gtk/bookmark_bar_gtk.cc b/chrome/browser/gtk/bookmark_bar_gtk.cc
index 62edacf..b8c3c20 100644
--- a/chrome/browser/gtk/bookmark_bar_gtk.cc
+++ b/chrome/browser/gtk/bookmark_bar_gtk.cc
@@ -26,6 +26,7 @@
#include "chrome/browser/gtk/custom_button.h"
#include "chrome/browser/gtk/gtk_chrome_button.h"
#include "chrome/browser/gtk/gtk_theme_provider.h"
+#include "chrome/browser/gtk/import_dialog_gtk.h"
#include "chrome/browser/gtk/rounded_window.h"
#include "chrome/browser/gtk/tabstrip_origin_provider.h"
#include "chrome/browser/gtk/tabs/tab_strip_gtk.h"
@@ -123,7 +124,6 @@ BookmarkBarGtk::BookmarkBarGtk(BrowserWindowGtk* window,
window_(window),
tabstrip_origin_provider_(tabstrip_origin_provider),
model_(NULL),
- instructions_label_(NULL),
instructions_(NULL),
sync_service_(NULL),
dragged_node_(NULL),
@@ -209,15 +209,11 @@ void BookmarkBarGtk::Init(Profile* profile) {
bookmark_hbox_ = gtk_hbox_new(FALSE, 0);
gtk_container_add(GTK_CONTAINER(paint_box_), bookmark_hbox_);
- instructions_ = gtk_alignment_new(0.0, 0.0, 1.0, 1.0);
+ instructions_ = gtk_alignment_new(0, 0, 1, 1);
gtk_alignment_set_padding(GTK_ALIGNMENT(instructions_), 0, 0,
kInstructionsPadding, 0);
- g_signal_connect(instructions_, "destroy", G_CALLBACK(gtk_widget_destroyed),
- &instructions_);
- instructions_label_ =
- gtk_label_new(l10n_util::GetStringUTF8(IDS_BOOKMARKS_NO_ITEMS).c_str());
- UpdateInstructionsLabelColor();
- gtk_container_add(GTK_CONTAINER(instructions_), instructions_label_);
+ instructions_gtk_.reset(new BookmarkBarInstructionsGtk(this, profile));
+ gtk_container_add(GTK_CONTAINER(instructions_), instructions_gtk_->widget());
gtk_box_pack_start(GTK_BOX(bookmark_hbox_), instructions_,
FALSE, FALSE, 0);
@@ -350,6 +346,10 @@ void BookmarkBarGtk::OnStateChanged() {
}
}
+void BookmarkBarGtk::ShowImportDialog() {
+ ImportDialogGtk::Show(window_->window(), browser_->profile(), FAVORITES);
+}
+
void BookmarkBarGtk::EnterFullscreen() {
if (ShouldBeFloating())
Show(false);
@@ -531,16 +531,6 @@ int BookmarkBarGtk::GetBookmarkButtonCount() {
return count;
}
-void BookmarkBarGtk::UpdateInstructionsLabelColor() {
- if (theme_provider_->UseGtkTheme()) {
- gtk_util::SetLabelColor(instructions_label_, NULL);
- } else {
- GdkColor color = theme_provider_->GetGdkColor(
- BrowserThemeProvider::COLOR_BOOKMARK_TEXT);
- gtk_util::SetLabelColor(instructions_label_, &color);
- }
-}
-
void BookmarkBarGtk::SetOverflowButtonAppearance() {
GtkWidget* former_child = gtk_bin_get_child(GTK_BIN(overflow_button_));
if (former_child)
@@ -733,8 +723,6 @@ void BookmarkBarGtk::Observe(NotificationType type,
<< "don't have a BookmarkModel. Taking no action.";
}
- UpdateInstructionsLabelColor();
-
UpdateEventBoxPaintability();
GdkColor paint_box_color =
diff --git a/chrome/browser/gtk/bookmark_bar_gtk.h b/chrome/browser/gtk/bookmark_bar_gtk.h
index fa2110d..98e958e 100644
--- a/chrome/browser/gtk/bookmark_bar_gtk.h
+++ b/chrome/browser/gtk/bookmark_bar_gtk.h
@@ -14,6 +14,7 @@
#include "base/gfx/size.h"
#include "base/scoped_ptr.h"
#include "chrome/browser/bookmarks/bookmark_model_observer.h"
+#include "chrome/browser/gtk/bookmark_bar_instructions_gtk.h"
#include "chrome/browser/gtk/menu_bar_helper.h"
#include "chrome/browser/gtk/view_id_util.h"
#include "chrome/browser/sync/profile_sync_service.h"
@@ -36,7 +37,8 @@ class BookmarkBarGtk : public AnimationDelegate,
public ProfileSyncServiceObserver,
public BookmarkModelObserver,
public MenuBarHelper::Delegate,
- public NotificationObserver {
+ public NotificationObserver,
+ public BookmarkBarInstructionsGtk::Delegate {
FRIEND_TEST(BookmarkBarGtkUnittest, DisplaysHelpMessageOnEmpty);
FRIEND_TEST(BookmarkBarGtkUnittest, HidesHelpMessageWithBookmark);
FRIEND_TEST(BookmarkBarGtkUnittest, BuildsButtons);
@@ -122,9 +124,6 @@ class BookmarkBarGtk : public AnimationDelegate,
// bookmark bar model has.
int GetBookmarkButtonCount();
- // Sets the correct color for |instructions_label_|.
- void UpdateInstructionsLabelColor();
-
// Set the appearance of the overflow button appropriately (either chromium
// style or GTK style).
void SetOverflowButtonAppearance();
@@ -266,6 +265,9 @@ class BookmarkBarGtk : public AnimationDelegate,
// ProfileSyncServiceObserver method.
virtual void OnStateChanged();
+ // Overriden from BookmarkBarInstructionsGtk::Delegate.
+ virtual void ShowImportDialog();
+
Profile* profile_;
// Used for opening urls.
@@ -294,12 +296,14 @@ class BookmarkBarGtk : public AnimationDelegate,
// Used to position all children.
GtkWidget* bookmark_hbox_;
- // A GtkLabel to display when there are no bookmark buttons to display.
- GtkWidget* instructions_label_;
-
- // The alignment for |instructions_label_|.
+ // Alignment widget that is visible if there are no bookmarks on
+ // the bookmar bar.
GtkWidget* instructions_;
+ // BookmarkBarInstructionsGtk that holds the label and the link for importing
+ // bookmarks when there are no bookmarks on the bookmark bar.
+ scoped_ptr<BookmarkBarInstructionsGtk> instructions_gtk_;
+
// GtkToolbar which contains all the bookmark buttons.
OwnedWidgetGtk bookmark_toolbar_;
diff --git a/chrome/browser/gtk/bookmark_bar_instructions_gtk.cc b/chrome/browser/gtk/bookmark_bar_instructions_gtk.cc
new file mode 100644
index 0000000..271dd59
--- /dev/null
+++ b/chrome/browser/gtk/bookmark_bar_instructions_gtk.cc
@@ -0,0 +1,87 @@
+// Copyright (c) 2010 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef CHROME_BROWSER_GTK_BOOKMARK_BAR_INSTRUCTIONS_GTK_CC_
+#define CHROME_BROWSER_GTK_BOOKMARK_BAR_INSTRUCTIONS_GTK_CC_
+
+#include "chrome/browser/gtk/bookmark_bar_instructions_gtk.h"
+
+#include "app/l10n_util.h"
+#include "base/observer_list.h"
+#include "chrome/browser/gtk/gtk_chrome_link_button.h"
+#include "chrome/browser/gtk/gtk_theme_provider.h"
+#include "chrome/common/gtk_util.h"
+#include "chrome/common/notification_service.h"
+#include "grit/generated_resources.h"
+
+BookmarkBarInstructionsGtk::BookmarkBarInstructionsGtk(Delegate* delegate,
+ Profile* profile)
+ : delegate_(delegate),
+ profile_(profile) {
+ instructions_hbox_ = gtk_hbox_new(FALSE, 0);
+
+ instructions_label_ =
+ gtk_label_new(l10n_util::GetStringUTF8(IDS_BOOKMARKS_NO_ITEMS).c_str());
+ instructions_label_ = gtk_label_new(
+ l10n_util::GetStringUTF8(IDS_BOOKMARKS_NO_ITEMS).c_str());
+ gtk_util::CenterWidgetInHBox(instructions_hbox_, instructions_label_,
+ false, 1);
+
+ instructions_link_ = gtk_chrome_link_button_new(
+ l10n_util::GetStringUTF8(IDS_BOOKMARK_BAR_IMPORT_LINK).c_str());
+ g_signal_connect(instructions_link_, "clicked",
+ G_CALLBACK(OnButtonClick), this);
+ gtk_util::SetButtonTriggersNavigation(instructions_link_);
+ // Until we switch to vector graphics, force the font size.
+ // 13.4px == 10pt @ 96dpi
+ gtk_util::ForceFontSizePixels(
+ GTK_CHROME_LINK_BUTTON(instructions_link_)->label, 13.4);
+ gtk_util::CenterWidgetInHBox(instructions_hbox_, instructions_link_,
+ false, 1);
+
+ registrar_.Add(this, NotificationType::BROWSER_THEME_CHANGED,
+ NotificationService::AllSources());
+}
+
+void BookmarkBarInstructionsGtk::Observe(NotificationType type,
+ const NotificationSource& source,
+ const NotificationDetails& details) {
+ if (type == NotificationType::BROWSER_THEME_CHANGED)
+ UpdateColors();
+}
+
+// static
+void BookmarkBarInstructionsGtk::OnButtonClick(
+ GtkWidget* button, BookmarkBarInstructionsGtk* instructions) {
+ instructions->delegate_->ShowImportDialog();
+}
+
+void BookmarkBarInstructionsGtk::UpdateColors() {
+ const GtkThemeProvider* theme_provider = GtkThemeProvider::GetFrom(profile_);
+ if (!theme_provider)
+ return;
+
+ gtk_chrome_link_button_set_use_gtk_theme(
+ GTK_CHROME_LINK_BUTTON(instructions_link_),
+ theme_provider->UseGtkTheme());
+
+ // When using a non-standard, non-gtk theme, we make the link color match
+ // the bookmark text color. Otherwise, standard link blue can look very
+ // bad for some dark themes.
+ if (theme_provider->GetColor(BrowserThemeProvider::COLOR_BOOKMARK_TEXT) ==
+ BrowserThemeProvider::GetDefaultColor(
+ BrowserThemeProvider::COLOR_BOOKMARK_TEXT)) {
+ gtk_util::SetLabelColor(instructions_label_, NULL);
+ gtk_chrome_link_button_set_normal_color(
+ GTK_CHROME_LINK_BUTTON(instructions_link_), NULL);
+ } else {
+ GdkColor bookmark_color = theme_provider->GetGdkColor(
+ BrowserThemeProvider::COLOR_BOOKMARK_TEXT);
+ gtk_util::SetLabelColor(instructions_label_, &bookmark_color);
+ gtk_chrome_link_button_set_normal_color(
+ GTK_CHROME_LINK_BUTTON(instructions_link_), &bookmark_color);
+ }
+}
+
+#endif // CHROME_BROWSER_GTK_BOOKMARK_BAR_INSTRUCTIONS_GTK_CC_
diff --git a/chrome/browser/gtk/bookmark_bar_instructions_gtk.h b/chrome/browser/gtk/bookmark_bar_instructions_gtk.h
new file mode 100644
index 0000000..13a324b
--- /dev/null
+++ b/chrome/browser/gtk/bookmark_bar_instructions_gtk.h
@@ -0,0 +1,56 @@
+// Copyright (c) 2010 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef CHROME_BROWSER_GTK_BOOKMARK_BAR_INSTRUCTIONS_GTK_H_
+#define CHROME_BROWSER_GTK_BOOKMARK_BAR_INSTRUCTIONS_GTK_H_
+
+#include "base/basictypes.h"
+#include "chrome/common/notification_observer.h"
+#include "chrome/common/notification_registrar.h"
+
+typedef struct _GtkWidget GtkWidget;
+class Profile;
+
+class BookmarkBarInstructionsGtk : public NotificationObserver {
+ public:
+ // The delegate is notified once the user clicks on the link to import
+ // bookmarks.
+ class Delegate {
+ public:
+ virtual void ShowImportDialog() = 0;
+ };
+
+ explicit BookmarkBarInstructionsGtk(Delegate* delegate, Profile* profile);
+
+ // Get the native widget.
+ GtkWidget* widget() const { return instructions_hbox_; }
+
+ private:
+ // Overridden from NotificationObserver:
+ virtual void Observe(NotificationType type,
+ const NotificationSource& source,
+ const NotificationDetails& details);
+
+ static void OnButtonClick(GtkWidget* button,
+ BookmarkBarInstructionsGtk* instructions);
+
+ // Sets the correct color for |instructions_label_| and |instructions_link_|.
+ void UpdateColors();
+
+ Delegate* delegate_;
+
+ Profile* profile_;
+
+ // HBox that holds the the label and link of bookmark bar import promotion.
+ GtkWidget* instructions_hbox_;
+
+ GtkWidget* instructions_label_;
+ GtkWidget* instructions_link_;
+
+ NotificationRegistrar registrar_;
+
+ DISALLOW_COPY_AND_ASSIGN(BookmarkBarInstructionsGtk);
+};
+
+#endif // CHROME_BROWSER_GTK_BOOKMARK_BAR_INSTRUCTIONS_GTK_H_
diff --git a/chrome/browser/gtk/browser_window_gtk.cc b/chrome/browser/gtk/browser_window_gtk.cc
index 440639a..22ed0c7 100644
--- a/chrome/browser/gtk/browser_window_gtk.cc
+++ b/chrome/browser/gtk/browser_window_gtk.cc
@@ -845,7 +845,7 @@ void BrowserWindowGtk::ShowClearBrowsingDataDialog() {
}
void BrowserWindowGtk::ShowImportDialog() {
- ImportDialogGtk::Show(window_, browser_->profile());
+ ImportDialogGtk::Show(window_, browser_->profile(), ALL);
}
void BrowserWindowGtk::ShowSearchEnginesDialog() {
diff --git a/chrome/browser/gtk/import_dialog_gtk.cc b/chrome/browser/gtk/import_dialog_gtk.cc
index 877e07c..71546b2 100644
--- a/chrome/browser/gtk/import_dialog_gtk.cc
+++ b/chrome/browser/gtk/import_dialog_gtk.cc
@@ -11,8 +11,9 @@
#include "grit/locale_settings.h"
// static
-void ImportDialogGtk::Show(GtkWindow* parent, Profile* profile) {
- new ImportDialogGtk(parent, profile);
+void ImportDialogGtk::Show(GtkWindow* parent, Profile* profile,
+ int initial_state) {
+ new ImportDialogGtk(parent, profile, initial_state);
}
////////////////////////////////////////////////////////////////////////////////
@@ -26,8 +27,12 @@ void ImportDialogGtk::ImportComplete() {
delete this;
}
-ImportDialogGtk::ImportDialogGtk(GtkWindow* parent, Profile* profile)
- : parent_(parent), profile_(profile), importer_host_(new ImporterHost()) {
+ImportDialogGtk::ImportDialogGtk(GtkWindow* parent, Profile* profile,
+ int initial_state)
+ : parent_(parent),
+ profile_(profile),
+ importer_host_(new ImporterHost()),
+ initial_state_(initial_state) {
// Build the dialog.
dialog_ = gtk_dialog_new_with_buttons(
l10n_util::GetStringUTF8(IDS_IMPORT_SETTINGS_TITLE).c_str(),
@@ -74,22 +79,26 @@ ImportDialogGtk::ImportDialogGtk(GtkWindow* parent, Profile* profile)
bookmarks_ = gtk_check_button_new_with_label(
l10n_util::GetStringUTF8(IDS_IMPORT_FAVORITES_CHKBOX).c_str());
gtk_box_pack_start(GTK_BOX(vbox), bookmarks_, FALSE, FALSE, 0);
- gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(bookmarks_), TRUE);
+ gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(bookmarks_),
+ (initial_state_ & FAVORITES) != 0);
search_engines_ = gtk_check_button_new_with_label(
l10n_util::GetStringUTF8(IDS_IMPORT_SEARCH_ENGINES_CHKBOX).c_str());
gtk_box_pack_start(GTK_BOX(vbox), search_engines_, FALSE, FALSE, 0);
- gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(search_engines_), TRUE);
+ gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(search_engines_),
+ (initial_state_ & SEARCH_ENGINES) != 0);
passwords_ = gtk_check_button_new_with_label(
l10n_util::GetStringUTF8(IDS_IMPORT_PASSWORDS_CHKBOX).c_str());
gtk_box_pack_start(GTK_BOX(vbox), passwords_, FALSE, FALSE, 0);
- gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(passwords_), TRUE);
+ gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(passwords_),
+ (initial_state_ & PASSWORDS) != 0);
history_ = gtk_check_button_new_with_label(
l10n_util::GetStringUTF8(IDS_IMPORT_HISTORY_CHKBOX).c_str());
gtk_box_pack_start(GTK_BOX(vbox), history_, FALSE, FALSE, 0);
- gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(history_), TRUE);
+ gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(history_),
+ (initial_state_ & HISTORY) !=0);
gtk_box_pack_start(GTK_BOX(content_area), vbox, FALSE, FALSE, 0);
diff --git a/chrome/browser/gtk/import_dialog_gtk.h b/chrome/browser/gtk/import_dialog_gtk.h
index 1a62ddd..8be3dd0 100644
--- a/chrome/browser/gtk/import_dialog_gtk.h
+++ b/chrome/browser/gtk/import_dialog_gtk.h
@@ -12,14 +12,16 @@ class Profile;
class ImportDialogGtk : public ImportObserver {
public:
// Displays the import box to import data from another browser into |profile|
- static void Show(GtkWindow* parent, Profile* profile);
+ // |initial_state| is a bitmask of ImportItems. Each checkbox for the bits in
+ // is checked.
+ static void Show(GtkWindow* parent, Profile* profile, int initial_state);
// Overridden from ImportObserver:
virtual void ImportCanceled();
virtual void ImportComplete();
private:
- ImportDialogGtk(GtkWindow* parent, Profile* profile);
+ ImportDialogGtk(GtkWindow* parent, Profile* profile, int initial_state);
~ImportDialogGtk() { }
static void HandleOnResponseDialog(GtkWidget* widget,
@@ -56,6 +58,8 @@ class ImportDialogGtk : public ImportObserver {
// Utility class that does the actual import.
scoped_refptr<ImporterHost> importer_host_;
+ int initial_state_;
+
DISALLOW_COPY_AND_ASSIGN(ImportDialogGtk);
};
diff --git a/chrome/browser/gtk/options/content_page_gtk.cc b/chrome/browser/gtk/options/content_page_gtk.cc
index af67c8c..0f97bc3 100644
--- a/chrome/browser/gtk/options/content_page_gtk.cc
+++ b/chrome/browser/gtk/options/content_page_gtk.cc
@@ -397,7 +397,7 @@ void ContentPageGtk::OnImportButtonClicked(GtkButton* widget,
ContentPageGtk* page) {
ImportDialogGtk::Show(
GTK_WINDOW(gtk_widget_get_toplevel(GTK_WIDGET(widget))),
- page->profile());
+ page->profile(), ALL);
}
// static
diff --git a/chrome/chrome_browser.gypi b/chrome/chrome_browser.gypi
index a0a4565..d89aca1 100755
--- a/chrome/chrome_browser.gypi
+++ b/chrome/chrome_browser.gypi
@@ -851,6 +851,8 @@
'browser/gtk/blocked_popup_container_view_gtk.h',
'browser/gtk/bookmark_bar_gtk.cc',
'browser/gtk/bookmark_bar_gtk.h',
+ 'browser/gtk/bookmark_bar_instructions_gtk.cc',
+ 'browser/gtk/bookmark_bar_instructions_gtk.h',
'browser/gtk/bookmark_bubble_gtk.cc',
'browser/gtk/bookmark_bubble_gtk.h',
'browser/gtk/bookmark_context_menu_gtk.cc',