diff options
author | estade@chromium.org <estade@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-08-03 21:02:16 +0000 |
---|---|---|
committer | estade@chromium.org <estade@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-08-03 21:02:16 +0000 |
commit | 9d350e8367dbce79d96f9dd8f22639f12b07a75c (patch) | |
tree | c82d56b186a3ef473264bd3d1d5ae4037cab9452 /chrome/browser/gtk/owned_widget_gtk.cc | |
parent | e71cb9554f18b9ae666d3a0b90178c107fc94eb2 (diff) | |
download | chromium_src-9d350e8367dbce79d96f9dd8f22639f12b07a75c.zip chromium_src-9d350e8367dbce79d96f9dd8f22639f12b07a75c.tar.gz chromium_src-9d350e8367dbce79d96f9dd8f22639f12b07a75c.tar.bz2 |
Move owned_widget_gtk.* out of common/, into browser/gtk/.
common/ is for files shared between the renderer and browser processes, and OwnedWidgetGtk is not used outside of browser/.
BUG=none
TEST=compile
Review URL: http://codereview.chromium.org/3063023
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@54817 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/browser/gtk/owned_widget_gtk.cc')
-rw-r--r-- | chrome/browser/gtk/owned_widget_gtk.cc | 38 |
1 files changed, 38 insertions, 0 deletions
diff --git a/chrome/browser/gtk/owned_widget_gtk.cc b/chrome/browser/gtk/owned_widget_gtk.cc new file mode 100644 index 0000000..db3bd30 --- /dev/null +++ b/chrome/browser/gtk/owned_widget_gtk.cc @@ -0,0 +1,38 @@ +// 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/owned_widget_gtk.h" + +#include <gtk/gtk.h> + +#include "base/logging.h" + +OwnedWidgetGtk::~OwnedWidgetGtk() { + DCHECK(!widget_) << "You must explicitly call OwnerWidgetGtk::Destroy()."; +} + +void OwnedWidgetGtk::Own(GtkWidget* widget) { + DCHECK(!widget_); + // We want to make sure that Own() was called properly, right after the + // widget was created. There should be a floating reference. + DCHECK(g_object_is_floating(widget)); + + // Sink the floating reference, we should now own this reference. + g_object_ref_sink(widget); + widget_ = widget; +} + +void OwnedWidgetGtk::Destroy() { + if (!widget_) + return; + + GtkWidget* widget = widget_; + widget_ = NULL; + gtk_widget_destroy(widget); + + DCHECK(!g_object_is_floating(widget)); + // NOTE: Assumes some implementation details about glib internals. + DCHECK_EQ(G_OBJECT(widget)->ref_count, 1U); + g_object_unref(widget); +} |