#ifndef UI_BASE_GTK_GTK_SIGNAL_REGISTRAR_H_
#define UI_BASE_GTK_GTK_SIGNAL_REGISTRAR_H_
#include <glib.h>
#include <map>
#include <vector>
#include "base/basictypes.h"
#include "ui/base/ui_base_export.h"
typedef void (*GCallback) (void);
typedef struct _GObject GObject;
typedef struct _GtkWidget GtkWidget;
namespace ui {
class UI_BASE_EXPORT GtkSignalRegistrar {
public:
GtkSignalRegistrar();
~GtkSignalRegistrar();
glong Connect(gpointer instance, const gchar* detailed_signal,
GCallback signal_handler, gpointer data);
glong ConnectAfter(gpointer instance, const gchar* detailed_signal,
GCallback signal_handler, gpointer data);
void DisconnectAll(gpointer instance);
private:
typedef std::vector<glong> HandlerList;
typedef std::map<GObject*, HandlerList> HandlerMap;
static void WeakNotifyThunk(gpointer data, GObject* where_the_object_was) {
reinterpret_cast<GtkSignalRegistrar*>(data)->WeakNotify(
where_the_object_was);
}
void WeakNotify(GObject* where_the_object_was);
glong ConnectInternal(gpointer instance, const gchar* detailed_signal,
GCallback signal_handler, gpointer data, bool after);
HandlerMap handler_lists_;
DISALLOW_COPY_AND_ASSIGN(GtkSignalRegistrar);
};
}
#endif