+class WidgetFocusPrinter
+{
+ const char* m_name;
+
+ static gboolean focus_in(GtkWidget *widget, GdkEventFocus *event, WidgetFocusPrinter* self)
+ {
+ globalOutputStream() << self->m_name << " takes focus\n";
+ return FALSE;
+ }
+ static gboolean focus_out(GtkWidget *widget, GdkEventFocus *event, WidgetFocusPrinter* self)
+ {
+ globalOutputStream() << self->m_name << " loses focus\n";
+ return FALSE;
+ }
+public:
+ WidgetFocusPrinter(const char* name) : m_name(name)
+ {
+ }
+ void connect(GtkWidget* widget)
+ {
+ g_signal_connect(G_OBJECT(widget), "focus_in_event", G_CALLBACK(focus_in), this);
+ g_signal_connect(G_OBJECT(widget), "focus_out_event", G_CALLBACK(focus_out), this);
+ }
+};