172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen// Copyright (c) 2011 The Chromium Authors. All rights reserved. 2c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Use of this source code is governed by a BSD-style license that can be 3c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// found in the LICENSE file. 4c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 5dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen#include "chrome/browser/ui/gtk/bookmarks/bookmark_bar_instructions_gtk.h" 6c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 7c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "base/observer_list.h" 872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen#include "chrome/browser/ui/gtk/gtk_chrome_link_button.h" 972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen#include "chrome/browser/ui/gtk/gtk_chrome_shrinkable_hbox.h" 10ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "chrome/browser/ui/gtk/gtk_theme_service.h" 1172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen#include "chrome/browser/ui/gtk/gtk_util.h" 12dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen#include "content/common/notification_service.h" 13c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "grit/generated_resources.h" 1472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen#include "ui/base/l10n/l10n_util.h" 15c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 16c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochBookmarkBarInstructionsGtk::BookmarkBarInstructionsGtk(Delegate* delegate, 17c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch Profile* profile) 18c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch : delegate_(delegate), 19c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch profile_(profile), 20ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen theme_service_(GtkThemeService::GetFrom(profile_)) { 21c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch instructions_hbox_ = gtk_chrome_shrinkable_hbox_new(FALSE, FALSE, 0); 22c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch gtk_widget_set_size_request(instructions_hbox_, 0, -1); 23c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 24c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch instructions_label_ = gtk_label_new( 25c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch l10n_util::GetStringUTF8(IDS_BOOKMARKS_NO_ITEMS).c_str()); 26c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch gtk_misc_set_alignment(GTK_MISC(instructions_label_), 0, 0.5); 27c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch gtk_util::CenterWidgetInHBox(instructions_hbox_, instructions_label_, 28c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch false, 1); 29c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch g_signal_connect(instructions_label_, "map", 303345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick G_CALLBACK(gtk_util::InitLabelSizeRequestAndEllipsizeMode), 31c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch NULL); 32c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 33c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch instructions_link_ = gtk_chrome_link_button_new( 34c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch l10n_util::GetStringUTF8(IDS_BOOKMARK_BAR_IMPORT_LINK).c_str()); 35c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch gtk_misc_set_alignment( 36c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch GTK_MISC(GTK_CHROME_LINK_BUTTON(instructions_link_)->label), 0, 0.5); 37c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch g_signal_connect(instructions_link_, "clicked", 38c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch G_CALLBACK(OnButtonClickThunk), this); 39c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch gtk_util::SetButtonTriggersNavigation(instructions_link_); 40c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Until we switch to vector graphics, force the font size. 41c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // 13.4px == 10pt @ 96dpi 42c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch gtk_util::ForceFontSizePixels( 43c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch GTK_CHROME_LINK_BUTTON(instructions_link_)->label, 13.4); 44c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch gtk_util::CenterWidgetInHBox(instructions_hbox_, instructions_link_, 45c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch false, 6); 46c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch g_signal_connect(GTK_CHROME_LINK_BUTTON(instructions_link_)->label, "map", 473345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick G_CALLBACK(gtk_util::InitLabelSizeRequestAndEllipsizeMode), 48c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch NULL); 49c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 50c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch registrar_.Add(this, NotificationType::BROWSER_THEME_CHANGED, 51c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch NotificationService::AllSources()); 52ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen theme_service_->InitThemesFor(this); 53c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 54c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 55c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochvoid BookmarkBarInstructionsGtk::Observe(NotificationType type, 56c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch const NotificationSource& source, 57c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch const NotificationDetails& details) { 58c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch if (type == NotificationType::BROWSER_THEME_CHANGED) 59c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch UpdateColors(); 60c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 61c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 62c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochvoid BookmarkBarInstructionsGtk::OnButtonClick(GtkWidget* button) { 63c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch delegate_->ShowImportDialog(); 64c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 65c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 66c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochvoid BookmarkBarInstructionsGtk::UpdateColors() { 67c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch gtk_chrome_link_button_set_use_gtk_theme( 68c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch GTK_CHROME_LINK_BUTTON(instructions_link_), 69ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen theme_service_->UseGtkTheme()); 70c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 71ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen GdkColor bookmark_color = theme_service_->GetGdkColor( 72ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen ThemeService::COLOR_BOOKMARK_TEXT); 73ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen if (theme_service_->UseGtkTheme()) { 74c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch gtk_util::SetLabelColor(instructions_label_, NULL); 75c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch gtk_chrome_link_button_set_normal_color( 76c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch GTK_CHROME_LINK_BUTTON(instructions_link_), NULL); 77c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } else { 78c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch gtk_util::SetLabelColor(instructions_label_, &bookmark_color); 79c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 80c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // When using a non-standard, non-gtk theme, we make the link color match 81c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // the bookmark text color. Otherwise, standard link blue can look very 82c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // bad for some dark themes. 83ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen if (theme_service_->GetColor(ThemeService::COLOR_BOOKMARK_TEXT) == 84ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen ThemeService::GetDefaultColor( 85ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen ThemeService::COLOR_BOOKMARK_TEXT)) { 86c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch gtk_chrome_link_button_set_normal_color( 87c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch GTK_CHROME_LINK_BUTTON(instructions_link_), NULL); 88c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } else { 89c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch gtk_chrome_link_button_set_normal_color( 90c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch GTK_CHROME_LINK_BUTTON(instructions_link_), &bookmark_color); 91c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 92c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 93c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 94