diff options
Diffstat (limited to 'chrome')
-rw-r--r-- | chrome/browser/gtk/bookmark_bar_gtk.cc | 28 | ||||
-rw-r--r-- | chrome/browser/gtk/bookmark_bar_gtk.h | 20 | ||||
-rw-r--r-- | chrome/browser/gtk/bookmark_bar_instructions_gtk.cc | 87 | ||||
-rw-r--r-- | chrome/browser/gtk/bookmark_bar_instructions_gtk.h | 56 | ||||
-rw-r--r-- | chrome/browser/gtk/browser_window_gtk.cc | 2 | ||||
-rw-r--r-- | chrome/browser/gtk/import_dialog_gtk.cc | 25 | ||||
-rw-r--r-- | chrome/browser/gtk/import_dialog_gtk.h | 8 | ||||
-rw-r--r-- | chrome/browser/gtk/options/content_page_gtk.cc | 2 | ||||
-rwxr-xr-x | chrome/chrome_browser.gypi | 2 |
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', |