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

Unified Diff: chrome/browser/gtk/infobar_container_gtk.cc

Issue 6251001: Move chrome/browser/gtk/ to chrome/browser/ui/gtk/... (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: '' Created 9 years, 11 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « chrome/browser/gtk/infobar_container_gtk.h ('k') | chrome/browser/gtk/infobar_gtk.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/browser/gtk/infobar_container_gtk.cc
===================================================================
--- chrome/browser/gtk/infobar_container_gtk.cc (revision 71352)
+++ chrome/browser/gtk/infobar_container_gtk.cc (working copy)
@@ -1,221 +0,0 @@
-// Copyright (c) 2010 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/gtk/infobar_container_gtk.h"
-
-#include <gtk/gtk.h>
-
-#include <utility>
-
-#include "base/command_line.h"
-#include "chrome/browser/browser_window.h"
-#include "chrome/browser/gtk/browser_window_gtk.h"
-#include "chrome/browser/gtk/gtk_theme_provider.h"
-#include "chrome/browser/gtk/gtk_util.h"
-#include "chrome/browser/gtk/infobar_gtk.h"
-#include "chrome/browser/platform_util.h"
-#include "chrome/browser/tab_contents/infobar_delegate.h"
-#include "chrome/browser/tab_contents/tab_contents.h"
-#include "chrome/common/notification_details.h"
-#include "chrome/common/notification_source.h"
-#include "third_party/skia/include/core/SkPaint.h"
-
-namespace {
-
-static const char* kInfoBar = "info-bar";
-
-// If |infobar_widget| matches |info_bar_delegate|, then close the infobar.
-void AnimateClosingForDelegate(GtkWidget* infobar_widget,
- gpointer info_bar_delegate) {
- InfoBarDelegate* delegate =
- static_cast<InfoBarDelegate*>(info_bar_delegate);
- InfoBar* infobar = reinterpret_cast<InfoBar*>(
- g_object_get_data(G_OBJECT(infobar_widget), kInfoBar));
-
- if (!infobar) {
- NOTREACHED();
- return;
- }
-
- if (delegate == infobar->delegate())
- infobar->AnimateClose();
-}
-
-// If |infobar_widget| matches |info_bar_delegate|, then close the infobar w/o
-// an animation.
-void ClosingForDelegate(GtkWidget* infobar_widget, gpointer info_bar_delegate) {
- InfoBarDelegate* delegate =
- static_cast<InfoBarDelegate*>(info_bar_delegate);
- InfoBar* infobar = reinterpret_cast<InfoBar*>(
- g_object_get_data(G_OBJECT(infobar_widget), kInfoBar));
-
- if (!infobar) {
- NOTREACHED();
- return;
- }
-
- if (delegate == infobar->delegate())
- infobar->Close();
-}
-
-// Get the height of the widget and add it to |userdata|, but only if it is in
-// the process of animating.
-void SumAnimatingBarHeight(GtkWidget* widget, gpointer userdata) {
- int* height_sum = static_cast<int*>(userdata);
- InfoBar* infobar = reinterpret_cast<InfoBar*>(
- g_object_get_data(G_OBJECT(widget), kInfoBar));
- if (infobar->IsAnimating())
- *height_sum += widget->allocation.height;
-}
-
-} // namespace
-
-// InfoBarContainerGtk, public: ------------------------------------------------
-
-InfoBarContainerGtk::InfoBarContainerGtk(Profile* profile)
- : profile_(profile),
- tab_contents_(NULL),
- container_(gtk_vbox_new(FALSE, 0)) {
- gtk_widget_show(widget());
-}
-
-InfoBarContainerGtk::~InfoBarContainerGtk() {
- ChangeTabContents(NULL);
-
- container_.Destroy();
-}
-
-void InfoBarContainerGtk::ChangeTabContents(TabContents* contents) {
- if (tab_contents_)
- registrar_.RemoveAll();
-
- gtk_util::RemoveAllChildren(widget());
- UpdateToolbarInfoBarState(NULL, false);
-
- tab_contents_ = contents;
- if (tab_contents_) {
- UpdateInfoBars();
- Source<TabContents> source(tab_contents_);
- registrar_.Add(this, NotificationType::TAB_CONTENTS_INFOBAR_ADDED, source);
- registrar_.Add(this, NotificationType::TAB_CONTENTS_INFOBAR_REMOVED,
- source);
- registrar_.Add(this, NotificationType::TAB_CONTENTS_INFOBAR_REPLACED,
- source);
- }
-}
-
-void InfoBarContainerGtk::RemoveDelegate(InfoBarDelegate* delegate) {
- tab_contents_->RemoveInfoBar(delegate);
-}
-
-int InfoBarContainerGtk::TotalHeightOfAnimatingBars() const {
- int sum = 0;
- gtk_container_foreach(GTK_CONTAINER(widget()), SumAnimatingBarHeight, &sum);
- return sum;
-}
-
-// InfoBarContainerGtk, NotificationObserver implementation: -------------------
-
-void InfoBarContainerGtk::Observe(NotificationType type,
- const NotificationSource& source,
- const NotificationDetails& details) {
- if (type == NotificationType::TAB_CONTENTS_INFOBAR_ADDED) {
- AddInfoBar(Details<InfoBarDelegate>(details).ptr(), true);
- } else if (type == NotificationType::TAB_CONTENTS_INFOBAR_REMOVED) {
- RemoveInfoBar(Details<InfoBarDelegate>(details).ptr(), true);
- } else if (type == NotificationType::TAB_CONTENTS_INFOBAR_REPLACED) {
- std::pair<InfoBarDelegate*, InfoBarDelegate*>* delegates =
- Details<std::pair<InfoBarDelegate*, InfoBarDelegate*> >(details).ptr();
-
- // By not animating the removal/addition, this appears to be a replace.
- RemoveInfoBar(delegates->first, false);
- AddInfoBar(delegates->second, false);
- } else {
- NOTREACHED();
- }
-}
-
-// InfoBarContainerGtk, private: -----------------------------------------------
-
-void InfoBarContainerGtk::UpdateInfoBars() {
- for (int i = 0; i < tab_contents_->infobar_delegate_count(); ++i) {
- InfoBarDelegate* delegate = tab_contents_->GetInfoBarDelegateAt(i);
- AddInfoBar(delegate, false);
- }
-}
-
-void InfoBarContainerGtk::ShowArrowForDelegate(InfoBarDelegate* delegate,
- bool animate) {
- GList* children = gtk_container_get_children(GTK_CONTAINER(widget()));
- if (!children)
- return;
-
- // Iterate through the infobars and find the last one that isn't closing.
- InfoBar* last_bar = NULL;
- InfoBar* this_bar = NULL;
- for (GList* iter = children; iter != NULL; iter = iter->next) {
- this_bar = reinterpret_cast<InfoBar*>(
- g_object_get_data(G_OBJECT(iter->data), kInfoBar));
-
- if (this_bar->delegate() == delegate)
- break;
-
- if (!this_bar->IsClosing())
- last_bar = this_bar;
-
- this_bar = NULL;
- }
-
- if (last_bar)
- last_bar->ShowArrowFor(this_bar, animate);
- else
- UpdateToolbarInfoBarState(this_bar, animate);
-
- g_list_free(children);
-}
-
-void InfoBarContainerGtk::AddInfoBar(InfoBarDelegate* delegate, bool animate) {
- InfoBar* infobar = delegate->CreateInfoBar();
- infobar->set_container(this);
- infobar->SetThemeProvider(GtkThemeProvider::GetFrom(profile_));
- gtk_box_pack_start(GTK_BOX(widget()), infobar->widget(),
- FALSE, FALSE, 0);
-
- if (animate)
- infobar->AnimateOpen();
- else
- infobar->Open();
-
- ShowArrowForDelegate(delegate, animate);
-}
-
-void InfoBarContainerGtk::RemoveInfoBar(InfoBarDelegate* delegate,
- bool animate) {
- if (animate) {
- gtk_container_foreach(GTK_CONTAINER(widget()),
- AnimateClosingForDelegate, delegate);
- } else {
- gtk_container_foreach(GTK_CONTAINER(widget()), ClosingForDelegate,
- delegate);
- }
-
- InfoBarDelegate* next_delegate = NULL;
- for (int i = 1; i < tab_contents_->infobar_delegate_count(); ++i) {
- if (tab_contents_->GetInfoBarDelegateAt(i - 1) == delegate) {
- next_delegate = tab_contents_->GetInfoBarDelegateAt(i);
- break;
- }
- }
-
- ShowArrowForDelegate(next_delegate, animate);
-}
-
-void InfoBarContainerGtk::UpdateToolbarInfoBarState(
- InfoBar* infobar, bool animate) {
- GtkWindow* parent = platform_util::GetTopLevel(widget());
- BrowserWindowGtk* browser_window =
- BrowserWindowGtk::GetBrowserWindowForNativeWindow(parent);
- if (browser_window)
- browser_window->SetInfoBarShowing(infobar, animate);
-}
« no previous file with comments | « chrome/browser/gtk/infobar_container_gtk.h ('k') | chrome/browser/gtk/infobar_gtk.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698