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

Side by Side Diff: chrome/browser/ui/gtk/infobars/confirm_infobar_gtk.cc

Issue 14327008: Add InitWidgets() phase for GTK infobars. (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: Created 7 years, 8 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/infobars/confirm_infobar_gtk.h" 5 #include "chrome/browser/ui/gtk/infobars/confirm_infobar_gtk.h"
6 6
7 #include <gtk/gtk.h> 7 #include <gtk/gtk.h>
8 8
9 #include "base/utf_string_conversions.h" 9 #include "base/utf_string_conversions.h"
10 #include "chrome/browser/ui/gtk/event_utils.h" 10 #include "chrome/browser/ui/gtk/event_utils.h"
11 #include "chrome/browser/ui/gtk/gtk_chrome_link_button.h" 11 #include "chrome/browser/ui/gtk/gtk_chrome_link_button.h"
12 #include "chrome/browser/ui/gtk/gtk_chrome_shrinkable_hbox.h" 12 #include "chrome/browser/ui/gtk/gtk_chrome_shrinkable_hbox.h"
13 #include "chrome/browser/ui/gtk/gtk_util.h" 13 #include "chrome/browser/ui/gtk/gtk_util.h"
14 #include "ui/base/gtk/gtk_signal_registrar.h" 14 #include "ui/base/gtk/gtk_signal_registrar.h"
15 15
16 // ConfirmInfoBarDelegate ------------------------------------------------------ 16 // ConfirmInfoBarDelegate ------------------------------------------------------
17 17
18 InfoBar* ConfirmInfoBarDelegate::CreateInfoBar(InfoBarService* owner) { 18 InfoBar* ConfirmInfoBarDelegate::CreateInfoBar(InfoBarService* owner) {
19 return new ConfirmInfoBarGtk(owner, this); 19 return new ConfirmInfoBarGtk(owner, this);
20 } 20 }
21 21
22 // ConfirmInfoBarGtk ----------------------------------------------------------- 22 // ConfirmInfoBarGtk -----------------------------------------------------------
23 23
24 ConfirmInfoBarGtk::ConfirmInfoBarGtk(InfoBarService* owner, 24 ConfirmInfoBarGtk::ConfirmInfoBarGtk(InfoBarService* owner,
25 ConfirmInfoBarDelegate* delegate) 25 ConfirmInfoBarDelegate* delegate)
26 : InfoBarGtk(owner, delegate), 26 : InfoBarGtk(owner, delegate),
27 confirm_hbox_(NULL),
27 size_group_(NULL) { 28 size_group_(NULL) {
29 }
30
31 ConfirmInfoBarGtk::~ConfirmInfoBarGtk() {
32 if (size_group_)
33 g_object_unref(size_group_);
34 }
35
36 void ConfirmInfoBarGtk::InitWidgets() {
37 InfoBarGtk::InitWidgets();
38
28 confirm_hbox_ = gtk_chrome_shrinkable_hbox_new(FALSE, FALSE, 39 confirm_hbox_ = gtk_chrome_shrinkable_hbox_new(FALSE, FALSE,
29 kEndOfLabelSpacing); 40 kEndOfLabelSpacing);
30 // This alignment allocates the confirm hbox only as much space as it 41 // This alignment allocates the confirm hbox only as much space as it
31 // requests, and less if there is not enough available. 42 // requests, and less if there is not enough available.
32 GtkWidget* align = gtk_alignment_new(0, 0, 0, 1); 43 GtkWidget* align = gtk_alignment_new(0, 0, 0, 1);
33 gtk_container_add(GTK_CONTAINER(align), confirm_hbox_); 44 gtk_container_add(GTK_CONTAINER(align), confirm_hbox_);
34 gtk_box_pack_start(GTK_BOX(hbox_), align, TRUE, TRUE, 0); 45 gtk_box_pack_start(GTK_BOX(hbox_), align, TRUE, TRUE, 0);
35 46
36 // We add the buttons in reverse order and pack end instead of start so 47 // We add the buttons in reverse order and pack end instead of start so
37 // that the first widget to get shrunk is the label rather than the button(s). 48 // that the first widget to get shrunk is the label rather than the button(s).
38 AddButton(ConfirmInfoBarDelegate::BUTTON_OK); 49 AddButton(ConfirmInfoBarDelegate::BUTTON_OK);
39 AddButton(ConfirmInfoBarDelegate::BUTTON_CANCEL); 50 AddButton(ConfirmInfoBarDelegate::BUTTON_CANCEL);
40 51
41 std::string label_text = UTF16ToUTF8(delegate->GetMessageText()); 52 std::string label_text = UTF16ToUTF8(GetDelegate()->GetMessageText());
42 GtkWidget* label = CreateLabel(label_text); 53 GtkWidget* label = CreateLabel(label_text);
43 gtk_util::ForceFontSizePixels(label, 13.4); 54 gtk_util::ForceFontSizePixels(label, 13.4);
44 gtk_misc_set_alignment(GTK_MISC(label), 0, 0.5); 55 gtk_misc_set_alignment(GTK_MISC(label), 0, 0.5);
45 gtk_util::CenterWidgetInHBox(confirm_hbox_, label, true, 0); 56 gtk_util::CenterWidgetInHBox(confirm_hbox_, label, true, 0);
46 Signals()->Connect(label, "map", 57 Signals()->Connect(label, "map",
47 G_CALLBACK(gtk_util::InitLabelSizeRequestAndEllipsizeMode), 58 G_CALLBACK(gtk_util::InitLabelSizeRequestAndEllipsizeMode),
48 NULL); 59 NULL);
49 60
50 std::string link_text = UTF16ToUTF8(delegate->GetLinkText()); 61 std::string link_text = UTF16ToUTF8(GetDelegate()->GetLinkText());
51 if (link_text.empty()) 62 if (link_text.empty())
52 return; 63 return;
53 64
54 GtkWidget* link = CreateLinkButton(link_text); 65 GtkWidget* link = CreateLinkButton(link_text);
55 gtk_misc_set_alignment(GTK_MISC(GTK_CHROME_LINK_BUTTON(link)->label), 0, 0.5); 66 gtk_misc_set_alignment(GTK_MISC(GTK_CHROME_LINK_BUTTON(link)->label), 0, 0.5);
56 Signals()->Connect(link, "clicked", G_CALLBACK(OnLinkClickedThunk), this); 67 Signals()->Connect(link, "clicked", G_CALLBACK(OnLinkClickedThunk), this);
57 gtk_util::SetButtonTriggersNavigation(link); 68 gtk_util::SetButtonTriggersNavigation(link);
58 // Until we switch to vector graphics, force the font size. 69 // Until we switch to vector graphics, force the font size.
59 // 13.4px == 10pt @ 96dpi 70 // 13.4px == 10pt @ 96dpi
60 gtk_util::ForceFontSizePixels(GTK_CHROME_LINK_BUTTON(link)->label, 13.4); 71 gtk_util::ForceFontSizePixels(GTK_CHROME_LINK_BUTTON(link)->label, 13.4);
61 gtk_util::CenterWidgetInHBox(hbox_, link, true, kEndOfLabelSpacing); 72 gtk_util::CenterWidgetInHBox(hbox_, link, true, kEndOfLabelSpacing);
62 } 73 }
63 74
64 ConfirmInfoBarGtk::~ConfirmInfoBarGtk() { 75 ConfirmInfoBarDelegate* ConfirmInfoBarGtk::GetDelegate() {
65 if (size_group_) 76 return delegate()->AsConfirmInfoBarDelegate();
66 g_object_unref(size_group_);
67 } 77 }
68 78
69 void ConfirmInfoBarGtk::AddButton(ConfirmInfoBarDelegate::InfoBarButton type) { 79 void ConfirmInfoBarGtk::AddButton(ConfirmInfoBarDelegate::InfoBarButton type) {
80 DCHECK(confirm_hbox_);
70 if (delegate()->AsConfirmInfoBarDelegate()->GetButtons() & type) { 81 if (delegate()->AsConfirmInfoBarDelegate()->GetButtons() & type) {
71 if (!size_group_) 82 if (!size_group_)
72 size_group_ = gtk_size_group_new(GTK_SIZE_GROUP_HORIZONTAL); 83 size_group_ = gtk_size_group_new(GTK_SIZE_GROUP_HORIZONTAL);
73 84
74 GtkWidget* button = gtk_button_new_with_label(UTF16ToUTF8( 85 GtkWidget* button = gtk_button_new_with_label(UTF16ToUTF8(
75 delegate()->AsConfirmInfoBarDelegate()->GetButtonLabel(type)).c_str()); 86 delegate()->AsConfirmInfoBarDelegate()->GetButtonLabel(type)).c_str());
76 gtk_size_group_add_widget(size_group_, button); 87 gtk_size_group_add_widget(size_group_, button);
77 88
78 gtk_util::CenterWidgetInHBox(confirm_hbox_, button, true, 0); 89 gtk_util::CenterWidgetInHBox(confirm_hbox_, button, true, 0);
79 Signals()->Connect(button, "clicked", 90 Signals()->Connect(button, "clicked",
(...skipping 11 matching lines...) Expand all
91 void ConfirmInfoBarGtk::OnCancelButton(GtkWidget* widget) { 102 void ConfirmInfoBarGtk::OnCancelButton(GtkWidget* widget) {
92 if (delegate()->AsConfirmInfoBarDelegate()->Cancel()) 103 if (delegate()->AsConfirmInfoBarDelegate()->Cancel())
93 RemoveSelf(); 104 RemoveSelf();
94 } 105 }
95 106
96 void ConfirmInfoBarGtk::OnLinkClicked(GtkWidget* widget) { 107 void ConfirmInfoBarGtk::OnLinkClicked(GtkWidget* widget) {
97 if (delegate()->AsConfirmInfoBarDelegate()->LinkClicked( 108 if (delegate()->AsConfirmInfoBarDelegate()->LinkClicked(
98 event_utils::DispositionForCurrentButtonPressEvent())) 109 event_utils::DispositionForCurrentButtonPressEvent()))
99 RemoveSelf(); 110 RemoveSelf();
100 } 111 }
OLDNEW
« no previous file with comments | « chrome/browser/ui/gtk/infobars/confirm_infobar_gtk.h ('k') | chrome/browser/ui/gtk/infobars/extension_infobar_gtk.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698