- add sources.
[platform/framework/web/crosswalk.git] / src / ui / base / gtk / owned_widget_gtk.cc
1 // Copyright (c) 2011 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 "ui/base/gtk/owned_widget_gtk.h"
6
7 #include <gtk/gtk.h>
8
9 #include "base/logging.h"
10
11 namespace ui {
12
13 OwnedWidgetGtk::~OwnedWidgetGtk() {
14   Destroy();
15 }
16
17 void OwnedWidgetGtk::Own(GtkWidget* widget) {
18   if (!widget)
19     return;
20
21   DCHECK(!widget_);
22   // We want to make sure that Own() was called properly, right after the
23   // widget was created. There should be a floating reference.
24   DCHECK(g_object_is_floating(widget));
25
26   // Sink the floating reference, we should now own this reference.
27   g_object_ref_sink(widget);
28   widget_ = widget;
29 }
30
31 void OwnedWidgetGtk::Destroy() {
32   if (!widget_)
33     return;
34
35   GtkWidget* widget = widget_;
36   widget_ = NULL;
37   gtk_widget_destroy(widget);
38
39   DCHECK(!g_object_is_floating(widget));
40   // NOTE: Assumes some implementation details about glib internals.
41   DCHECK_EQ(G_OBJECT(widget)->ref_count, 1U);
42   g_object_unref(widget);
43 }
44
45 }  // namespace ui