OLD | NEW |
1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2010 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/gtk/infobar_container_gtk.h" | 5 #include "chrome/browser/gtk/infobar_container_gtk.h" |
6 | 6 |
7 #include <gtk/gtk.h> | 7 #include <gtk/gtk.h> |
8 | 8 |
9 #include "base/command_line.h" | 9 #include "base/command_line.h" |
10 #include "chrome/browser/browser_window.h" | 10 #include "chrome/browser/browser_window.h" |
(...skipping 105 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
116 // InfoBarContainerGtk, NotificationObserver implementation: ------------------- | 116 // InfoBarContainerGtk, NotificationObserver implementation: ------------------- |
117 | 117 |
118 void InfoBarContainerGtk::Observe(NotificationType type, | 118 void InfoBarContainerGtk::Observe(NotificationType type, |
119 const NotificationSource& source, | 119 const NotificationSource& source, |
120 const NotificationDetails& details) { | 120 const NotificationDetails& details) { |
121 if (type == NotificationType::TAB_CONTENTS_INFOBAR_ADDED) { | 121 if (type == NotificationType::TAB_CONTENTS_INFOBAR_ADDED) { |
122 AddInfoBar(Details<InfoBarDelegate>(details).ptr(), true); | 122 AddInfoBar(Details<InfoBarDelegate>(details).ptr(), true); |
123 } else if (type == NotificationType::TAB_CONTENTS_INFOBAR_REMOVED) { | 123 } else if (type == NotificationType::TAB_CONTENTS_INFOBAR_REMOVED) { |
124 RemoveInfoBar(Details<InfoBarDelegate>(details).ptr(), true); | 124 RemoveInfoBar(Details<InfoBarDelegate>(details).ptr(), true); |
125 } else if (type == NotificationType::TAB_CONTENTS_INFOBAR_REPLACED) { | 125 } else if (type == NotificationType::TAB_CONTENTS_INFOBAR_REPLACED) { |
126 std::pair<InfoBarDelegate*, InfoBarDelegate*>* delegates = | 126 typedef std::pair<InfoBarDelegate*, InfoBarDelegate*> DelegatePair; |
127 Details<std::pair<InfoBarDelegate*, InfoBarDelegate*> >(details).ptr(); | 127 DelegatePair* delegate_pair = Details<DelegatePair>(details).ptr(); |
128 | 128 |
129 // By not animating the removal/addition, this appears to be a replace. | 129 // By not animating the removal/addition, this appears to be a replace. |
130 RemoveInfoBar(delegates->first, false); | 130 RemoveInfoBar(delegate_pair->first, false); |
131 AddInfoBar(delegates->second, false); | 131 AddInfoBar(delegate_pair->second, false); |
132 } else { | 132 } else { |
133 NOTREACHED(); | 133 NOTREACHED(); |
134 } | 134 } |
135 } | 135 } |
136 | 136 |
137 // InfoBarContainerGtk, private: ----------------------------------------------- | 137 // InfoBarContainerGtk, private: ----------------------------------------------- |
138 | 138 |
139 void InfoBarContainerGtk::UpdateInfoBars() { | 139 void InfoBarContainerGtk::UpdateInfoBars() { |
140 for (int i = 0; i < tab_contents_->infobar_delegate_count(); ++i) { | 140 for (int i = 0; i < tab_contents_->infobar_delegate_count(); ++i) { |
141 InfoBarDelegate* delegate = tab_contents_->GetInfoBarDelegateAt(i); | 141 InfoBarDelegate* delegate = tab_contents_->GetInfoBarDelegateAt(i); |
142 AddInfoBar(delegate, false); | 142 AddInfoBar(delegate, false); |
143 } | 143 } |
144 } | 144 } |
145 | 145 |
146 void InfoBarContainerGtk::ShowArrowForDelegate(InfoBarDelegate* delegate, | 146 void InfoBarContainerGtk::ShowArrowForDelegate(InfoBarDelegate* delegate, |
147 bool animate) { | 147 bool animate) { |
148 GList* children = gtk_container_get_children(GTK_CONTAINER(widget())); | 148 GList* children = gtk_container_get_children(GTK_CONTAINER(widget())); |
149 if (!children) | 149 if (!children) |
150 return; | 150 return; |
151 | 151 |
152 // Iterate through the infobars and find the last one that isn't closing. | 152 // Iterate through the infobars and find the last one that isn't closing. |
153 InfoBar* last_bar = NULL; | 153 InfoBar* last_bar = NULL; |
154 InfoBar* this_bar = NULL; | 154 InfoBar* this_bar = NULL; |
155 for (GList* iter = children; iter != NULL; iter = iter->next) { | 155 for (GList* iter = children; iter != NULL; iter = iter->next) { |
156 this_bar = reinterpret_cast<InfoBar*>( | 156 this_bar = reinterpret_cast<InfoBar*>( |
157 g_object_get_data(G_OBJECT(iter->data), kInfoBar)); | 157 g_object_get_data(G_OBJECT(iter->data), kInfoBar)); |
158 | 158 |
159 if (this_bar->delegate() == delegate) | 159 if ((delegate != NULL) && (this_bar->delegate() == delegate)) |
160 break; | 160 break; |
161 | 161 |
162 if (!this_bar->IsClosing()) | 162 if (!this_bar->IsClosing()) |
163 last_bar = this_bar; | 163 last_bar = this_bar; |
164 | 164 |
165 this_bar = NULL; | 165 this_bar = NULL; |
166 } | 166 } |
167 | 167 |
168 if (last_bar) | 168 if (last_bar) |
169 last_bar->ShowArrowFor(this_bar, animate); | 169 last_bar->ShowArrowFor(this_bar, animate); |
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
210 } | 210 } |
211 | 211 |
212 void InfoBarContainerGtk::UpdateToolbarInfoBarState( | 212 void InfoBarContainerGtk::UpdateToolbarInfoBarState( |
213 InfoBar* infobar, bool animate) { | 213 InfoBar* infobar, bool animate) { |
214 GtkWindow* parent = platform_util::GetTopLevel(widget()); | 214 GtkWindow* parent = platform_util::GetTopLevel(widget()); |
215 BrowserWindowGtk* browser_window = | 215 BrowserWindowGtk* browser_window = |
216 BrowserWindowGtk::GetBrowserWindowForNativeWindow(parent); | 216 BrowserWindowGtk::GetBrowserWindowForNativeWindow(parent); |
217 if (browser_window) | 217 if (browser_window) |
218 browser_window->SetInfoBarShowing(infobar, animate); | 218 browser_window->SetInfoBarShowing(infobar, animate); |
219 } | 219 } |
OLD | NEW |