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
3// found in the LICENSE file.
4
5#include "chrome/browser/ui/gtk/infobars/alternate_nav_infobar_gtk.h"
6
7#include "chrome/browser/ui/gtk/event_utils.h"
8#include "chrome/browser/ui/omnibox/alternate_nav_infobar_delegate.h"
9
10
11// AlternateNavInfoBarDelegate -------------------------------------------------
12
13InfoBar* AlternateNavInfoBarDelegate::CreateInfoBar(InfoBarService* owner) {
14  return new AlternateNavInfoBarGtk(owner, this);
15}
16
17
18// AlternateNavInfoBarGtk ------------------------------------------------------
19
20AlternateNavInfoBarGtk::AlternateNavInfoBarGtk(
21    InfoBarService* owner,
22    AlternateNavInfoBarDelegate* delegate)
23    : InfoBarGtk(owner, delegate) {
24}
25
26AlternateNavInfoBarGtk::~AlternateNavInfoBarGtk() {
27}
28
29void AlternateNavInfoBarGtk::InitWidgets() {
30  InfoBarGtk::InitWidgets();
31
32  size_t link_offset;
33  string16 display_text = GetDelegate()->GetMessageTextWithOffset(&link_offset);
34  string16 link_text = GetDelegate()->GetLinkText();
35  AddLabelWithInlineLink(display_text, link_text, link_offset,
36                         G_CALLBACK(OnLinkClickedThunk));
37}
38
39AlternateNavInfoBarDelegate* AlternateNavInfoBarGtk::GetDelegate() {
40  return static_cast<AlternateNavInfoBarDelegate*>(delegate());
41}
42
43void AlternateNavInfoBarGtk::OnLinkClicked(GtkWidget* button) {
44  if (GetDelegate()->LinkClicked(
45        event_utils::DispositionForCurrentButtonPressEvent()))
46    RemoveSelf();
47}
48