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

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: Don't call ok in tests of advanced link 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/i18n/rtl.h" 9 #include "base/i18n/rtl.h"
10 #include "base/logging.h" 10 #include "base/logging.h"
11 #include "chrome/browser/ui/browser.h" 11 #include "chrome/browser/ui/browser.h"
12 #include "chrome/browser/ui/gtk/browser_toolbar_gtk.h" 12 #include "chrome/browser/ui/gtk/browser_toolbar_gtk.h"
13 #include "chrome/browser/ui/gtk/browser_window_gtk.h" 13 #include "chrome/browser/ui/gtk/browser_window_gtk.h"
14 #include "chrome/browser/ui/gtk/gtk_theme_service.h" 14 #include "chrome/browser/ui/gtk/gtk_theme_service.h"
15 #include "chrome/browser/ui/gtk/gtk_util.h" 15 #include "chrome/browser/ui/gtk/gtk_util.h"
16 #include "grit/chromium_strings.h" 16 #include "grit/chromium_strings.h"
17 #include "grit/generated_resources.h" 17 #include "grit/generated_resources.h"
18 #include "ui/base/l10n/l10n_util.h" 18 #include "ui/base/l10n/l10n_util.h"
19 19
20 namespace { 20 namespace {
21 21
22 // Padding between content and edge of bubble (in pixels). 22 // Padding between content and edge of bubble (in pixels).
23 const int kContentBorder = 7; 23 const int kContentBorder = 7;
24 24
25 } // namespace 25 } // namespace
26 26
27 OneClickSigninBubbleGtk::OneClickSigninBubbleGtk( 27 OneClickSigninBubbleGtk::OneClickSigninBubbleGtk(
28 BrowserWindowGtk* browser_window_gtk, 28 BrowserWindowGtk* browser_window_gtk,
29 const base::Closure& learn_more_callback, 29 const base::Callback<void(bool)>& start_sync_callback)
30 const base::Closure& advanced_callback)
31 : bubble_(NULL), 30 : bubble_(NULL),
32 learn_more_callback_(learn_more_callback), 31 start_sync_callback_(start_sync_callback),
33 advanced_callback_(advanced_callback) { 32 call_sync_callback_on_close_(true) {
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
76 // OK Button. 63 // OK Button.
77 GtkWidget* ok_button = gtk_button_new_with_label( 64 GtkWidget* ok_button = gtk_button_new_with_label(
78 l10n_util::GetStringUTF8(IDS_OK).c_str()); 65 l10n_util::GetStringUTF8(IDS_OK).c_str());
79 g_signal_connect(ok_button, "clicked", 66 g_signal_connect(ok_button, "clicked",
80 G_CALLBACK(OnClickOKThunk), this); 67 G_CALLBACK(OnClickOKThunk), this);
81 gtk_box_pack_end(GTK_BOX(bottom_line), 68 gtk_box_pack_end(GTK_BOX(bottom_line),
82 ok_button, FALSE, FALSE, 0); 69 ok_button, FALSE, FALSE, 0);
83 70
71 // Undo Button.
akalin 2012/05/17 00:39:24 add a TODO for me to figure out the spacing
Roger Tawa OOO till Jul 10th 2012/05/17 21:17:37 Done.
72 GtkWidget* undo_button = gtk_button_new_with_label(
73 l10n_util::GetStringUTF8(IDS_ONE_CLICK_BUBBLE_UNDO).c_str());
74 g_signal_connect(undo_button, "clicked",
75 G_CALLBACK(OnClickUndoThunk), this);
76 gtk_box_pack_end(GTK_BOX(bottom_line),
77 undo_button, FALSE, FALSE, 0);
78
84 GtkWidget* const app_menu_widget = 79 GtkWidget* const app_menu_widget =
85 browser_window_gtk->GetToolbar()->GetAppMenuButton(); 80 browser_window_gtk->GetToolbar()->GetAppMenuButton();
86 gfx::Rect bounds = gtk_util::WidgetBounds(app_menu_widget); 81 gfx::Rect bounds = gtk_util::WidgetBounds(app_menu_widget);
87 BubbleGtk::ArrowLocationGtk arrow_location = base::i18n::IsRTL() ? 82 BubbleGtk::ArrowLocationGtk arrow_location = base::i18n::IsRTL() ?
88 BubbleGtk::ARROW_LOCATION_TOP_LEFT : BubbleGtk::ARROW_LOCATION_TOP_RIGHT; 83 BubbleGtk::ARROW_LOCATION_TOP_LEFT : BubbleGtk::ARROW_LOCATION_TOP_RIGHT;
89 bubble_ = 84 bubble_ =
90 BubbleGtk::Show(app_menu_widget, &bounds, bubble_content, 85 BubbleGtk::Show(app_menu_widget, &bounds, bubble_content,
91 arrow_location, 86 arrow_location,
92 true, // match_system_theme 87 true, // match_system_theme
93 true, // grab_input 88 true, // grab_input
94 theme_provider, this); 89 theme_provider, this);
95 gtk_widget_grab_focus(ok_button); 90 gtk_widget_grab_focus(ok_button);
96 } 91 }
97 92
98 void OneClickSigninBubbleGtk::BubbleClosing( 93 void OneClickSigninBubbleGtk::BubbleClosing(
99 BubbleGtk* bubble, bool closed_by_escape) { 94 BubbleGtk* bubble, bool closed_by_escape) {
95 if (call_sync_callback_on_close_)
96 start_sync_callback_.Run(true);
97
100 delete this; 98 delete this;
101 } 99 }
102 100
103 void OneClickSigninBubbleGtk::ClickOKForTest() { 101 void OneClickSigninBubbleGtk::ClickOKForTest() {
104 OnClickOK(NULL); 102 OnClickOK(NULL);
105 } 103 }
106 104
107 void OneClickSigninBubbleGtk::ClickLearnMoreForTest() { 105 void OneClickSigninBubbleGtk::ClickUndoForTest() {
108 OnClickLearnMoreLink(NULL); 106 OnClickUndo(NULL);
109 } 107 }
110 108
111 void OneClickSigninBubbleGtk::ClickAdvancedForTest() { 109 void OneClickSigninBubbleGtk::ClickAdvancedForTest() {
112 OnClickAdvancedLink(NULL); 110 OnClickAdvancedLink(NULL);
113 } 111 }
114 112
115 void OneClickSigninBubbleGtk::OnClickLearnMoreLink(GtkWidget* link) { 113 void OneClickSigninBubbleGtk::CloseForTest() {
116 learn_more_callback_.Run();
117 bubble_->Close(); 114 bubble_->Close();
118 } 115 }
119 116
120 void OneClickSigninBubbleGtk::OnClickAdvancedLink(GtkWidget* link) { 117 void OneClickSigninBubbleGtk::OnClickAdvancedLink(GtkWidget* link) {
121 advanced_callback_.Run(); 118 call_sync_callback_on_close_ = false;
119 start_sync_callback_.Run(false);
122 bubble_->Close(); 120 bubble_->Close();
123 } 121 }
124 122
125 void OneClickSigninBubbleGtk::OnClickOK(GtkWidget* link) { 123 void OneClickSigninBubbleGtk::OnClickOK(GtkWidget* link) {
124 call_sync_callback_on_close_ = false;
125 start_sync_callback_.Run(true);
126 bubble_->Close(); 126 bubble_->Close();
127 } 127 }
128 128
129 OneClickSigninBubbleGtk::~OneClickSigninBubbleGtk() {} 129 void OneClickSigninBubbleGtk::OnClickUndo(GtkWidget* link) {
130 call_sync_callback_on_close_ = false;
131 bubble_->Close();
132 }
133
134 OneClickSigninBubbleGtk::~OneClickSigninBubbleGtk() {
135 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698