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/libgtk2ui/owned_widget_gtk2.h" 6 7 #include <gtk/gtk.h> 8 9 #include "base/logging.h" 10 11 namespace libgtk2ui { 12 ~OwnedWidgetGtk()13OwnedWidgetGtk::~OwnedWidgetGtk() { 14 Destroy(); 15 } 16 Own(GtkWidget * widget)17void 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 Destroy()31void 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 libgtk2ui 46