summaryrefslogtreecommitdiffstats
path: root/chromium/ui/base/gtk/g_object_destructor_filo.h
diff options
context:
space:
mode:
Diffstat (limited to 'chromium/ui/base/gtk/g_object_destructor_filo.h')
-rw-r--r--chromium/ui/base/gtk/g_object_destructor_filo.h91
1 files changed, 0 insertions, 91 deletions
diff --git a/chromium/ui/base/gtk/g_object_destructor_filo.h b/chromium/ui/base/gtk/g_object_destructor_filo.h
deleted file mode 100644
index 76e41f7c046..00000000000
--- a/chromium/ui/base/gtk/g_object_destructor_filo.h
+++ /dev/null
@@ -1,91 +0,0 @@
-// Copyright (c) 2012 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.
-
-#ifndef UI_BASE_GTK_G_OBJECT_DESTRUCTOR_FILO_H_
-#define UI_BASE_GTK_G_OBJECT_DESTRUCTOR_FILO_H_
-
-#include <glib.h>
-#include <list>
-#include <map>
-
-#include "base/basictypes.h"
-#include "ui/base/ui_export.h"
-
-template <typename T> struct DefaultSingletonTraits;
-
-typedef struct _GObject GObject;
-
-namespace ui {
-
-// This class hooks calls to g_object_weak_ref()/unref() and executes them in
-// FILO order. This is important if there are several hooks to the single object
-// (set up at different levels of class hierarchy) and the lowest hook (set up
-// first) is deleting self - it must be called last (among hooks for the given
-// object). Unfortunately Glib does not provide this guarantee.
-//
-// Use it as follows:
-//
-// static void OnDestroyedThunk(gpointer data, GObject *where_the_object_was) {
-// reinterpret_cast<MyClass*>(data)->OnDestroyed(where_the_object_was);
-// }
-// void MyClass::OnDestroyed(GObject *where_the_object_was) {
-// destroyed_ = true;
-// delete this;
-// }
-// MyClass::Init() {
-// ...
-// ui::GObjectDestructorFILO::GetInstance()->Connect(
-// G_OBJECT(my_widget), &OnDestroyedThunk, this);
-// }
-// MyClass::~MyClass() {
-// if (!destroyed_) {
-// ui::GObjectDestructorFILO::GetInstance()->Disconnect(
-// G_OBJECT(my_widget), &OnDestroyedThunk, this);
-// }
-// }
-//
-// TODO(glotov): Probably worth adding ScopedGObjectDtor<T>.
-//
-// This class is a singleton. Not thread safe. Must be called within UI thread.
-class UI_EXPORT GObjectDestructorFILO {
- public:
- typedef void (*DestructorHook)(void* context, GObject* where_the_object_was);
-
- static GObjectDestructorFILO* GetInstance();
- void Connect(GObject* object, DestructorHook callback, void* context);
- void Disconnect(GObject* object, DestructorHook callback, void* context);
-
- private:
- struct Hook {
- Hook(GObject* o, DestructorHook cb, void* ctx)
- : object(o), callback(cb), context(ctx) {
- }
- bool equal(GObject* o, DestructorHook cb, void* ctx) const {
- return object == o && callback == cb && context == ctx;
- }
- GObject* object;
- DestructorHook callback;
- void* context;
- };
- typedef std::list<Hook> HandlerList;
- typedef std::map<GObject*, HandlerList> HandlerMap;
-
- GObjectDestructorFILO();
- ~GObjectDestructorFILO();
- friend struct DefaultSingletonTraits<GObjectDestructorFILO>;
-
- void WeakNotify(GObject* where_the_object_was);
- static void WeakNotifyThunk(gpointer data, GObject* where_the_object_was) {
- reinterpret_cast<GObjectDestructorFILO*>(data)->WeakNotify(
- where_the_object_was);
- }
-
- HandlerMap handler_map_;
-
- DISALLOW_COPY_AND_ASSIGN(GObjectDestructorFILO);
-};
-
-} // namespace ui
-
-#endif // UI_BASE_GTK_G_OBJECT_DESTRUCTOR_FILO_H_