Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(38)

Side by Side Diff: chrome/browser/ui/gtk/one_click_signin_bubble_gtk.cc

Issue 10332185: Update behavior of one-click infobar to remove modal dialog, add "undo". (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Address review comments Created 8 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "chrome/browser/ui/gtk/one_click_signin_bubble_gtk.h" 5 #include "chrome/browser/ui/gtk/one_click_signin_bubble_gtk.h"
6 6
7 #include <gtk/gtk.h> 7 #include <gtk/gtk.h>
8 8
9 #include "base/callback_helpers.h"
9 #include "base/i18n/rtl.h" 10 #include "base/i18n/rtl.h"
10 #include "base/logging.h" 11 #include "base/logging.h"
11 #include "chrome/browser/ui/browser.h" 12 #include "chrome/browser/ui/browser.h"
12 #include "chrome/browser/ui/gtk/browser_toolbar_gtk.h" 13 #include "chrome/browser/ui/gtk/browser_toolbar_gtk.h"
13 #include "chrome/browser/ui/gtk/browser_window_gtk.h" 14 #include "chrome/browser/ui/gtk/browser_window_gtk.h"
14 #include "chrome/browser/ui/gtk/gtk_theme_service.h" 15 #include "chrome/browser/ui/gtk/gtk_theme_service.h"
15 #include "chrome/browser/ui/gtk/gtk_util.h" 16 #include "chrome/browser/ui/gtk/gtk_util.h"
16 #include "grit/chromium_strings.h" 17 #include "grit/chromium_strings.h"
17 #include "grit/generated_resources.h" 18 #include "grit/generated_resources.h"
18 #include "ui/base/l10n/l10n_util.h" 19 #include "ui/base/l10n/l10n_util.h"
19 20
20 namespace { 21 namespace {
21 22
22 // Padding between content and edge of bubble (in pixels). 23 // Padding between content and edge of bubble (in pixels).
23 const int kContentBorder = 7; 24 const int kContentBorder = 7;
24 25
25 } // namespace 26 } // namespace
26 27
27 OneClickSigninBubbleGtk::OneClickSigninBubbleGtk( 28 OneClickSigninBubbleGtk::OneClickSigninBubbleGtk(
28 BrowserWindowGtk* browser_window_gtk, 29 BrowserWindowGtk* browser_window_gtk,
29 const base::Closure& learn_more_callback, 30 const BrowserWindow::StartSyncCallback& start_sync_callback)
30 const base::Closure& advanced_callback)
31 : bubble_(NULL), 31 : bubble_(NULL),
32 learn_more_callback_(learn_more_callback), 32 start_sync_callback_(start_sync_callback) {
33 advanced_callback_(advanced_callback) {
34 33
35 // Setup the BubbleGtk content. 34 // Setup the BubbleGtk content.
36 GtkWidget* bubble_content = gtk_vbox_new(FALSE, 0); 35 GtkWidget* bubble_content = gtk_vbox_new(FALSE, 0);
37 gtk_container_set_border_width(GTK_CONTAINER(bubble_content), 36 gtk_container_set_border_width(GTK_CONTAINER(bubble_content),
38 kContentBorder); 37 kContentBorder);
39 38
40 // Message. 39 // Message.
41 GtkWidget* message_label = gtk_label_new( 40 GtkWidget* message_label = gtk_label_new(
42 l10n_util::GetStringFUTF8( 41 l10n_util::GetStringFUTF8(
43 IDS_SYNC_PROMO_NTP_BUBBLE_MESSAGE, 42 IDS_SYNC_PROMO_NTP_BUBBLE_MESSAGE,
44 l10n_util::GetStringUTF16(IDS_SHORT_PRODUCT_NAME)).c_str()); 43 l10n_util::GetStringUTF16(IDS_SHORT_PRODUCT_NAME)).c_str());
45 gtk_label_set_line_wrap(GTK_LABEL(message_label), TRUE); 44 gtk_label_set_line_wrap(GTK_LABEL(message_label), TRUE);
46 gtk_misc_set_alignment(GTK_MISC(message_label), 0.0, 0.5); 45 gtk_misc_set_alignment(GTK_MISC(message_label), 0.0, 0.5);
47 gtk_box_pack_start(GTK_BOX(bubble_content), message_label, FALSE, FALSE, 0); 46 gtk_box_pack_start(GTK_BOX(bubble_content), message_label, FALSE, FALSE, 0);
48 47
49 GtkThemeService* const theme_provider = GtkThemeService::GetFrom( 48 GtkThemeService* const theme_provider = GtkThemeService::GetFrom(
50 browser_window_gtk->browser()->profile()); 49 browser_window_gtk->browser()->profile());
51 50
52 GtkWidget* learn_more_line = gtk_hbox_new(FALSE, kContentBorder);
53 gtk_box_pack_start(GTK_BOX(bubble_content),
54 learn_more_line, FALSE, FALSE, 0);
55
56 // Learn more link.
57 GtkWidget* learn_more_link = theme_provider->BuildChromeLinkButton(
58 l10n_util::GetStringUTF8(IDS_SYNC_PROMO_NTP_BUBBLE_LEARN_MORE));
59 g_signal_connect(learn_more_link, "clicked",
60 G_CALLBACK(OnClickLearnMoreLinkThunk), this);
61 gtk_box_pack_start(GTK_BOX(learn_more_line),
62 learn_more_link, FALSE, FALSE, 0);
63
64 GtkWidget* bottom_line = gtk_hbox_new(FALSE, kContentBorder); 51 GtkWidget* bottom_line = gtk_hbox_new(FALSE, kContentBorder);
65 gtk_box_pack_start(GTK_BOX(bubble_content), 52 gtk_box_pack_start(GTK_BOX(bubble_content),
66 bottom_line, FALSE, FALSE, 0); 53 bottom_line, FALSE, FALSE, 0);
67 54
68 // Advanced link. 55 // Advanced link.
69 GtkWidget* advanced_link = theme_provider->BuildChromeLinkButton( 56 GtkWidget* advanced_link = theme_provider->BuildChromeLinkButton(
70 l10n_util::GetStringUTF8(IDS_SYNC_PROMO_NTP_BUBBLE_ADVANCED)); 57 l10n_util::GetStringUTF8(IDS_SYNC_PROMO_NTP_BUBBLE_ADVANCED));
71 g_signal_connect(advanced_link, "clicked", 58 g_signal_connect(advanced_link, "clicked",
72 G_CALLBACK(OnClickAdvancedLinkThunk), this); 59 G_CALLBACK(OnClickAdvancedLinkThunk), this);
73 gtk_box_pack_start(GTK_BOX(bottom_line), 60 gtk_box_pack_start(GTK_BOX(bottom_line),
74 advanced_link, FALSE, FALSE, 0); 61 advanced_link, FALSE, FALSE, 0);
75 62
63 // Make the OK and Undo buttons the same size horizontally.
64 GtkSizeGroup* size_group = gtk_size_group_new(GTK_SIZE_GROUP_HORIZONTAL);
65
76 // OK Button. 66 // OK Button.
77 GtkWidget* ok_button = gtk_button_new_with_label( 67 GtkWidget* ok_button = gtk_button_new_with_label(
78 l10n_util::GetStringUTF8(IDS_OK).c_str()); 68 l10n_util::GetStringUTF8(IDS_OK).c_str());
79 g_signal_connect(ok_button, "clicked", 69 g_signal_connect(ok_button, "clicked",
80 G_CALLBACK(OnClickOKThunk), this); 70 G_CALLBACK(OnClickOKThunk), this);
71 gtk_size_group_add_widget(size_group, ok_button);
81 gtk_box_pack_end(GTK_BOX(bottom_line), 72 gtk_box_pack_end(GTK_BOX(bottom_line),
82 ok_button, FALSE, FALSE, 0); 73 ok_button, FALSE, FALSE, 0);
83 74
75 // Undo Button.
76 GtkWidget* undo_button = gtk_button_new_with_label(
77 l10n_util::GetStringUTF8(IDS_ONE_CLICK_BUBBLE_UNDO).c_str());
78 g_signal_connect(undo_button, "clicked",
79 G_CALLBACK(OnClickUndoThunk), this);
80 gtk_size_group_add_widget(size_group, undo_button);
81 gtk_box_pack_end(GTK_BOX(bottom_line),
82 undo_button, FALSE, FALSE, 0);
83
84 g_object_unref(size_group);
85
84 GtkWidget* const app_menu_widget = 86 GtkWidget* const app_menu_widget =
85 browser_window_gtk->GetToolbar()->GetAppMenuButton(); 87 browser_window_gtk->GetToolbar()->GetAppMenuButton();
86 gfx::Rect bounds = gtk_util::WidgetBounds(app_menu_widget); 88 gfx::Rect bounds = gtk_util::WidgetBounds(app_menu_widget);
87 BubbleGtk::ArrowLocationGtk arrow_location = base::i18n::IsRTL() ? 89 BubbleGtk::ArrowLocationGtk arrow_location = base::i18n::IsRTL() ?
88 BubbleGtk::ARROW_LOCATION_TOP_LEFT : BubbleGtk::ARROW_LOCATION_TOP_RIGHT; 90 BubbleGtk::ARROW_LOCATION_TOP_LEFT : BubbleGtk::ARROW_LOCATION_TOP_RIGHT;
89 bubble_ = 91 bubble_ =
90 BubbleGtk::Show(app_menu_widget, &bounds, bubble_content, 92 BubbleGtk::Show(app_menu_widget, &bounds, bubble_content,
91 arrow_location, 93 arrow_location,
92 BubbleGtk::MATCH_SYSTEM_THEME | 94 BubbleGtk::MATCH_SYSTEM_THEME |
93 BubbleGtk::POPUP_WINDOW | 95 BubbleGtk::POPUP_WINDOW |
94 BubbleGtk::GRAB_INPUT, 96 BubbleGtk::GRAB_INPUT,
95 theme_provider, this); 97 theme_provider, this);
96 gtk_widget_grab_focus(ok_button); 98 gtk_widget_grab_focus(ok_button);
97 } 99 }
98 100
99 void OneClickSigninBubbleGtk::BubbleClosing( 101 void OneClickSigninBubbleGtk::BubbleClosing(
100 BubbleGtk* bubble, bool closed_by_escape) { 102 BubbleGtk* bubble, bool closed_by_escape) {
103 if (!start_sync_callback_.is_null())
104 base::ResetAndReturn(&start_sync_callback_).Run(
105 OneClickSigninSyncStarter::SYNC_WITH_DEFAULT_SETTINGS);
106
101 delete this; 107 delete this;
102 } 108 }
103 109
104 void OneClickSigninBubbleGtk::ClickOKForTest() {
105 OnClickOK(NULL);
106 }
107
108 void OneClickSigninBubbleGtk::ClickLearnMoreForTest() {
109 OnClickLearnMoreLink(NULL);
110 }
111
112 void OneClickSigninBubbleGtk::ClickAdvancedForTest() {
113 OnClickAdvancedLink(NULL);
114 }
115
116 void OneClickSigninBubbleGtk::OnClickLearnMoreLink(GtkWidget* link) {
117 learn_more_callback_.Run();
118 bubble_->Close();
119 }
120
121 void OneClickSigninBubbleGtk::OnClickAdvancedLink(GtkWidget* link) { 110 void OneClickSigninBubbleGtk::OnClickAdvancedLink(GtkWidget* link) {
122 advanced_callback_.Run(); 111 base::ResetAndReturn(&start_sync_callback_).Run(
112 OneClickSigninSyncStarter::CONFIGURE_SYNC_FIRST);
123 bubble_->Close(); 113 bubble_->Close();
124 } 114 }
125 115
126 void OneClickSigninBubbleGtk::OnClickOK(GtkWidget* link) { 116 void OneClickSigninBubbleGtk::OnClickOK(GtkWidget* link) {
117 base::ResetAndReturn(&start_sync_callback_).Run(
118 OneClickSigninSyncStarter::SYNC_WITH_DEFAULT_SETTINGS);
127 bubble_->Close(); 119 bubble_->Close();
128 } 120 }
129 121
130 OneClickSigninBubbleGtk::~OneClickSigninBubbleGtk() {} 122 void OneClickSigninBubbleGtk::OnClickUndo(GtkWidget* link) {
123 start_sync_callback_.Reset();
124 bubble_->Close();
125 }
126
127 OneClickSigninBubbleGtk::~OneClickSigninBubbleGtk() {
128 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698