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

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: A few more mac fixes 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"
10 #include "base/logging.h"
9 #include "base/i18n/rtl.h" 11 #include "base/i18n/rtl.h"
10 #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
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.
72 // TODO(akalin): at the moment, the OK and undo buttons are not the same
73 // size and look kind of ugly. Figure out how to make it nicer.
Elliot Glaysher 2012/05/24 20:10:56 If you are talking about having them be the same h
Roger Tawa OOO till Jul 10th 2012/05/24 20:50:26 Done.
74 GtkWidget* undo_button = gtk_button_new_with_label(
75 l10n_util::GetStringUTF8(IDS_ONE_CLICK_BUBBLE_UNDO).c_str());
76 g_signal_connect(undo_button, "clicked",
77 G_CALLBACK(OnClickUndoThunk), this);
78 gtk_box_pack_end(GTK_BOX(bottom_line),
79 undo_button, FALSE, FALSE, 0);
80
84 GtkWidget* const app_menu_widget = 81 GtkWidget* const app_menu_widget =
85 browser_window_gtk->GetToolbar()->GetAppMenuButton(); 82 browser_window_gtk->GetToolbar()->GetAppMenuButton();
86 gfx::Rect bounds = gtk_util::WidgetBounds(app_menu_widget); 83 gfx::Rect bounds = gtk_util::WidgetBounds(app_menu_widget);
87 BubbleGtk::ArrowLocationGtk arrow_location = base::i18n::IsRTL() ? 84 BubbleGtk::ArrowLocationGtk arrow_location = base::i18n::IsRTL() ?
88 BubbleGtk::ARROW_LOCATION_TOP_LEFT : BubbleGtk::ARROW_LOCATION_TOP_RIGHT; 85 BubbleGtk::ARROW_LOCATION_TOP_LEFT : BubbleGtk::ARROW_LOCATION_TOP_RIGHT;
89 bubble_ = 86 bubble_ =
90 BubbleGtk::Show(app_menu_widget, &bounds, bubble_content, 87 BubbleGtk::Show(app_menu_widget, &bounds, bubble_content,
91 arrow_location, 88 arrow_location,
92 BubbleGtk::MATCH_SYSTEM_THEME | 89 BubbleGtk::MATCH_SYSTEM_THEME |
93 BubbleGtk::POPUP_WINDOW | 90 BubbleGtk::POPUP_WINDOW |
94 BubbleGtk::GRAB_INPUT, 91 BubbleGtk::GRAB_INPUT,
95 theme_provider, this); 92 theme_provider, this);
96 gtk_widget_grab_focus(ok_button); 93 gtk_widget_grab_focus(ok_button);
97 } 94 }
98 95
99 void OneClickSigninBubbleGtk::BubbleClosing( 96 void OneClickSigninBubbleGtk::BubbleClosing(
100 BubbleGtk* bubble, bool closed_by_escape) { 97 BubbleGtk* bubble, bool closed_by_escape) {
98 if (!start_sync_callback_.is_null())
99 base::ResetAndReturn(&start_sync_callback_).Run(
100 OneClickSigninSyncStarter::SYNC_WITH_DEFAULT_SETTINGS);
101
101 delete this; 102 delete this;
102 } 103 }
103 104
104 void OneClickSigninBubbleGtk::ClickOKForTest() { 105 void OneClickSigninBubbleGtk::ClickOKForTest() {
105 OnClickOK(NULL); 106 OnClickOK(NULL);
106 } 107 }
107 108
108 void OneClickSigninBubbleGtk::ClickLearnMoreForTest() { 109 void OneClickSigninBubbleGtk::ClickUndoForTest() {
109 OnClickLearnMoreLink(NULL); 110 OnClickUndo(NULL);
110 } 111 }
111 112
112 void OneClickSigninBubbleGtk::ClickAdvancedForTest() { 113 void OneClickSigninBubbleGtk::ClickAdvancedForTest() {
113 OnClickAdvancedLink(NULL); 114 OnClickAdvancedLink(NULL);
114 } 115 }
115 116
116 void OneClickSigninBubbleGtk::OnClickLearnMoreLink(GtkWidget* link) { 117 void OneClickSigninBubbleGtk::CloseForTest() {
117 learn_more_callback_.Run();
118 bubble_->Close(); 118 bubble_->Close();
119 } 119 }
120 120
121 void OneClickSigninBubbleGtk::OnClickAdvancedLink(GtkWidget* link) { 121 void OneClickSigninBubbleGtk::OnClickAdvancedLink(GtkWidget* link) {
122 advanced_callback_.Run(); 122 base::ResetAndReturn(&start_sync_callback_).Run(
123 OneClickSigninSyncStarter::CONFIGURE_SYNC_FIRST);
123 bubble_->Close(); 124 bubble_->Close();
124 } 125 }
125 126
126 void OneClickSigninBubbleGtk::OnClickOK(GtkWidget* link) { 127 void OneClickSigninBubbleGtk::OnClickOK(GtkWidget* link) {
128 base::ResetAndReturn(&start_sync_callback_).Run(
129 OneClickSigninSyncStarter::SYNC_WITH_DEFAULT_SETTINGS);
127 bubble_->Close(); 130 bubble_->Close();
128 } 131 }
129 132
130 OneClickSigninBubbleGtk::~OneClickSigninBubbleGtk() {} 133 void OneClickSigninBubbleGtk::OnClickUndo(GtkWidget* link) {
134 start_sync_callback_.Reset();
135 bubble_->Close();
136 }
137
138 OneClickSigninBubbleGtk::~OneClickSigninBubbleGtk() {
139 }
OLDNEW
« no previous file with comments | « chrome/browser/ui/gtk/one_click_signin_bubble_gtk.h ('k') | chrome/browser/ui/gtk/one_click_signin_bubble_gtk_browsertest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698