blob: d4ac8f2475fedfb2eef6ca3c977160e484b88e57 [file] [log] [blame]
// Copyright (c) 2012 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "chrome/browser/ui/gtk/infobars/alternate_nav_infobar_gtk.h"
#include "chrome/browser/ui/gtk/event_utils.h"
#include "chrome/browser/ui/omnibox/alternate_nav_infobar_delegate.h"
// AlternateNavInfoBarDelegate -------------------------------------------------
// static
scoped_ptr<InfoBar> AlternateNavInfoBarDelegate::CreateInfoBar(
scoped_ptr<AlternateNavInfoBarDelegate> delegate) {
return scoped_ptr<InfoBar>(new AlternateNavInfoBarGtk(delegate.Pass()));
}
// AlternateNavInfoBarGtk ------------------------------------------------------
AlternateNavInfoBarGtk::AlternateNavInfoBarGtk(
scoped_ptr<AlternateNavInfoBarDelegate> delegate)
: InfoBarGtk(delegate.PassAs<InfoBarDelegate>()) {
}
AlternateNavInfoBarGtk::~AlternateNavInfoBarGtk() {
}
void AlternateNavInfoBarGtk::PlatformSpecificSetOwner() {
InfoBarGtk::PlatformSpecificSetOwner();
size_t link_offset;
base::string16 display_text =
GetDelegate()->GetMessageTextWithOffset(&link_offset);
base::string16 link_text = GetDelegate()->GetLinkText();
AddLabelWithInlineLink(display_text, link_text, link_offset,
G_CALLBACK(OnLinkClickedThunk));
}
AlternateNavInfoBarDelegate* AlternateNavInfoBarGtk::GetDelegate() {
return static_cast<AlternateNavInfoBarDelegate*>(delegate());
}
void AlternateNavInfoBarGtk::OnLinkClicked(GtkWidget* button) {
if (GetDelegate()->LinkClicked(
event_utils::DispositionForCurrentButtonPressEvent()))
RemoveSelf();
}