diff options
author | yoz@chromium.org <yoz@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-04-23 01:45:03 +0000 |
---|---|---|
committer | yoz@chromium.org <yoz@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-04-23 01:45:03 +0000 |
commit | 8aef8542b945edd69e1cd430fcfc80dd648ab31a (patch) | |
tree | 3e4752364c358617cfd59359ddb363629557d1b3 | |
parent | ed75aa6e5f81b6d06be5a888fa6cb5b32345fd7d (diff) | |
download | chromium_src-8aef8542b945edd69e1cd430fcfc80dd648ab31a.zip chromium_src-8aef8542b945edd69e1cd430fcfc80dd648ab31a.tar.gz chromium_src-8aef8542b945edd69e1cd430fcfc80dd648ab31a.tar.bz2 |
GTK: Support for multiple GlobalError message lines.
Screenshot: http://i.imgur.com/aufvtfE.png
Also fix the width of the message area to match the title's width if the title is long.
BUG=229083
Review URL: https://codereview.chromium.org/14358015
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@195683 0039d316-1c4b-4281-b951-d872f2087c98
-rw-r--r-- | chrome/browser/ui/gtk/global_error_bubble.cc | 37 | ||||
-rw-r--r-- | chrome/browser/ui/gtk/global_error_bubble.h | 7 |
2 files changed, 25 insertions, 19 deletions
diff --git a/chrome/browser/ui/gtk/global_error_bubble.cc b/chrome/browser/ui/gtk/global_error_bubble.cc index 47607cb..af32082 100644 --- a/chrome/browser/ui/gtk/global_error_bubble.cc +++ b/chrome/browser/ui/gtk/global_error_bubble.cc @@ -36,7 +36,8 @@ GlobalErrorBubble::GlobalErrorBubble(Browser* browser, GtkWidget* anchor) : browser_(browser), bubble_(NULL), - error_(error) { + error_(error), + message_width_(kMinMessageLabelWidth) { DCHECK(browser_); DCHECK(error_); GtkWidget* content = gtk_vbox_new(FALSE, ui::kControlSpacing); @@ -55,16 +56,15 @@ GlobalErrorBubble::GlobalErrorBubble(Browser* browser, GtkWidget* title_label = theme_service->BuildLabel( UTF16ToUTF8(error_->GetBubbleViewTitle()), ui::kGdkBlack); - // TODO(yoz): Support multi-line messages. - string16 message; - if (!error_->GetBubbleViewMessages().empty()) - message = error_->GetBubbleViewMessages()[0]; - message_label_ = theme_service->BuildLabel( - UTF16ToUTF8(message), - ui::kGdkBlack); - gtk_util::ForceFontSizePixels(message_label_, kMessageTextSize); + std::vector<string16> messages = error_->GetBubbleViewMessages(); + for (size_t i = 0; i < messages.size(); ++i) { + message_labels_.push_back(theme_service->BuildLabel( + UTF16ToUTF8(messages[i]), + ui::kGdkBlack)); + gtk_util::ForceFontSizePixels(message_labels_[i], kMessageTextSize); + } // Message label will be sized later in "realize" callback because we need - // to now the width of buttons group. + // to know the width of the title and the width of the buttons group. GtkWidget* accept_button = gtk_button_new_with_label( UTF16ToUTF8(error_->GetBubbleViewAcceptButtonLabel()).c_str()); string16 cancel_string = error_->GetBubbleViewCancelButtonLabel(); @@ -80,8 +80,9 @@ GlobalErrorBubble::GlobalErrorBubble(Browser* browser, gtk_box_pack_start(GTK_BOX(top), title_label, FALSE, FALSE, 0); gtk_box_pack_start(GTK_BOX(content), top, FALSE, FALSE, 0); - // Middle, message. - gtk_box_pack_start(GTK_BOX(content), message_label_, FALSE, FALSE, 0); + // Middle, messages. + for (size_t i = 0; i < message_labels_.size(); ++i) + gtk_box_pack_start(GTK_BOX(content), message_labels_[i], FALSE, FALSE, 0); gtk_box_pack_start(GTK_BOX(content), gtk_hbox_new(FALSE, 0), FALSE, FALSE, 0); // Bottom, accept and cancel button. @@ -103,7 +104,8 @@ GlobalErrorBubble::GlobalErrorBubble(Browser* browser, G_CALLBACK(OnCancelButtonThunk), this); } - g_signal_connect(bottom, "realize", G_CALLBACK(OnBottomRealizeThunk), this); + g_signal_connect(top, "realize", G_CALLBACK(OnRealizeThunk), this); + g_signal_connect(bottom, "realize", G_CALLBACK(OnRealizeThunk), this); bubble_ = BubbleGtk::Show(anchor, NULL, @@ -141,10 +143,11 @@ void GlobalErrorBubble::OnCancelButton(GtkWidget* sender) { bubble_->Close(); } -void GlobalErrorBubble::OnBottomRealize(GtkWidget* sender) { - int bottom_width = gtk_util::GetWidgetSize(sender).width(); - gtk_util::SetLabelWidth(message_label_, - std::max(kMinMessageLabelWidth, bottom_width)); +void GlobalErrorBubble::OnRealize(GtkWidget* sender) { + int width = gtk_util::GetWidgetSize(sender).width(); + message_width_ = std::max(message_width_, width); + for (size_t i = 0; i < message_labels_.size(); ++i) + gtk_util::SetLabelWidth(message_labels_[i], message_width_); } void GlobalErrorBubble::CloseBubbleView() { diff --git a/chrome/browser/ui/gtk/global_error_bubble.h b/chrome/browser/ui/gtk/global_error_bubble.h index 921a7f8..1802ff0 100644 --- a/chrome/browser/ui/gtk/global_error_bubble.h +++ b/chrome/browser/ui/gtk/global_error_bubble.h @@ -5,6 +5,8 @@ #ifndef CHROME_BROWSER_UI_GTK_GLOBAL_ERROR_BUBBLE_H_ #define CHROME_BROWSER_UI_GTK_GLOBAL_ERROR_BUBBLE_H_ +#include <vector> + #include "base/basictypes.h" #include "base/compiler_specific.h" #include "base/memory/weak_ptr.h" @@ -32,14 +34,15 @@ class GlobalErrorBubble : public BubbleDelegateGtk, CHROMEGTK_CALLBACK_0(GlobalErrorBubble, void, OnDestroy); CHROMEGTK_CALLBACK_0(GlobalErrorBubble, void, OnAcceptButton); CHROMEGTK_CALLBACK_0(GlobalErrorBubble, void, OnCancelButton); - CHROMEGTK_CALLBACK_0(GlobalErrorBubble, void, OnBottomRealize); + CHROMEGTK_CALLBACK_0(GlobalErrorBubble, void, OnRealize); virtual void CloseBubbleView() OVERRIDE; Browser* browser_; BubbleGtk* bubble_; base::WeakPtr<GlobalError> error_; - GtkWidget* message_label_; + std::vector<GtkWidget*> message_labels_; + int message_width_; DISALLOW_COPY_AND_ASSIGN(GlobalErrorBubble); }; |