-typedef struct _GtkEntry GtkEntry;
-
-
-inline gboolean escape_clear_focus_widget( GtkWidget* widget, GdkEventKey* event, gpointer data ){
- if ( event->keyval == GDK_Escape ) {
- gtk_window_set_focus( GTK_WINDOW( gtk_widget_get_toplevel( GTK_WIDGET( widget ) ) ), NULL );
- return TRUE;
- }
- return FALSE;
-}
-
-inline void widget_connect_escape_clear_focus_widget( GtkWidget* widget ){
- g_signal_connect( G_OBJECT( widget ), "key_press_event", G_CALLBACK( escape_clear_focus_widget ), 0 );
-}
-
-
-class NonModalEntry
-{
-bool m_editing;
-Callback m_apply;
-Callback m_cancel;
-
-static gboolean focus_in( GtkEntry* entry, GdkEventFocus *event, NonModalEntry* self ){
- self->m_editing = false;
- return FALSE;
-}
-
-static gboolean focus_out( GtkEntry* entry, GdkEventFocus *event, NonModalEntry* self ){
- if ( self->m_editing && GTK_WIDGET_VISIBLE( entry ) ) {
- self->m_apply();
- }
- self->m_editing = false;
- return FALSE;
-}
-
-static gboolean changed( GtkEntry* entry, NonModalEntry* self ){
- self->m_editing = true;
- return FALSE;
-}
-
-static gboolean enter( GtkEntry* entry, GdkEventKey* event, NonModalEntry* self ){
- if ( event->keyval == GDK_Return ) {
- self->m_apply();
- self->m_editing = false;
- gtk_window_set_focus( GTK_WINDOW( gtk_widget_get_toplevel( GTK_WIDGET( entry ) ) ), NULL );
- return TRUE;
- }
- return FALSE;
-}
-
-static gboolean escape( GtkEntry* entry, GdkEventKey* event, NonModalEntry* self ){
- if ( event->keyval == GDK_Escape ) {
- self->m_cancel();
- self->m_editing = false;
- gtk_window_set_focus( GTK_WINDOW( gtk_widget_get_toplevel( GTK_WIDGET( entry ) ) ), NULL );
- return TRUE;
- }
- return FALSE;
-}
+gboolean escape_clear_focus_widget(ui::Widget widget, GdkEventKey *event, gpointer data);
+
+void widget_connect_escape_clear_focus_widget(ui::Widget widget);
+
+class NonModalEntry {
+ bool m_editing;
+ Callback<void()> m_apply;
+ Callback<void()> m_cancel;
+
+ static gboolean focus_in(ui::Entry entry, GdkEventFocus *event, NonModalEntry *self);
+
+ static gboolean focus_out(ui::Entry entry, GdkEventFocus *event, NonModalEntry *self);
+
+ static gboolean changed(ui::Entry entry, NonModalEntry *self);
+
+ static gboolean enter(ui::Entry entry, GdkEventKey *event, NonModalEntry *self);
+
+ static gboolean escape(ui::Entry entry, GdkEventKey *event, NonModalEntry *self);