summaryrefslogtreecommitdiffstats
path: root/chrome/browser/gtk/constrained_window_gtk.cc
diff options
context:
space:
mode:
Diffstat (limited to 'chrome/browser/gtk/constrained_window_gtk.cc')
-rw-r--r--chrome/browser/gtk/constrained_window_gtk.cc63
1 files changed, 63 insertions, 0 deletions
diff --git a/chrome/browser/gtk/constrained_window_gtk.cc b/chrome/browser/gtk/constrained_window_gtk.cc
new file mode 100644
index 0000000..21b45b8
--- /dev/null
+++ b/chrome/browser/gtk/constrained_window_gtk.cc
@@ -0,0 +1,63 @@
+// Copyright (c) 2009 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/constrained_window_gtk.h"
+
+#include "chrome/browser/tab_contents/tab_contents.h"
+#include "chrome/browser/tab_contents/tab_contents_view_gtk.h"
+#include "chrome/common/gtk_util.h"
+
+// The minimal border around the edge of the notification.
+const int kSmallPadding = 2;
+
+ConstrainedWindowGtk::ConstrainedWindowGtk(
+ TabContents* owner, ConstrainedWindowGtkDelegate* delegate)
+ : owner_(owner),
+ delegate_(delegate) {
+ DCHECK(owner);
+ DCHECK(delegate);
+ GtkWidget* dialog = delegate->GetWidgetRoot();
+
+ // Unlike other users of CreateBorderBin, we need a dedicated frame around
+ // our "window".
+ GtkWidget* ebox = gtk_event_box_new();
+ GtkWidget* frame = gtk_frame_new(NULL);
+ gtk_frame_set_shadow_type(GTK_FRAME(frame), GTK_SHADOW_ETCHED_OUT);
+ GtkWidget* alignment = gtk_alignment_new(0.0, 0.0, 1.0, 1.0);
+ gtk_alignment_set_padding(GTK_ALIGNMENT(alignment),
+ kSmallPadding, kSmallPadding, kSmallPadding, kSmallPadding);
+ gtk_container_add(GTK_CONTAINER(alignment), dialog);
+ gtk_container_add(GTK_CONTAINER(frame), alignment);
+ gtk_container_add(GTK_CONTAINER(ebox), frame);
+ border_.Own(ebox);
+
+ gtk_widget_show_all(border_.get());
+
+ // We collaborate with TabContentsViewGtk and stick ourselves in the
+ // TabContentsViewGtk's floating container.
+ ContainingView()->AttachConstrainedWindow(this);
+}
+
+ConstrainedWindowGtk::~ConstrainedWindowGtk() {
+ border_.Destroy();
+}
+
+void ConstrainedWindowGtk::CloseConstrainedWindow() {
+ ContainingView()->RemoveConstrainedWindow(this);
+ delegate_->DeleteDelegate();
+ owner_->WillClose(this);
+
+ delete this;
+}
+
+TabContentsViewGtk* ConstrainedWindowGtk::ContainingView() {
+ return static_cast<TabContentsViewGtk*>(owner_->view());
+}
+
+// static
+ConstrainedWindow* ConstrainedWindow::CreateConstrainedDialog(
+ TabContents* parent,
+ ConstrainedWindowGtkDelegate* delegate) {
+ return new ConstrainedWindowGtk(parent, delegate);
+}