OLD | NEW |
---|---|
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" |
akalin
2012/05/24 18:42:04
sort (i18n goes before logging)
Roger Tawa OOO till Jul 10th
2012/05/24 19:08:33
this is the correct sorting, since we should keep
| |
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. | |
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 } | |
OLD | NEW |