]> git.saurik.com Git - wxWidgets.git/commitdiff
implement editing_started and _done events for GTK+ >= 2.6
authorRobert Roebling <robert@roebling.de>
Sat, 25 Aug 2007 20:43:20 +0000 (20:43 +0000)
committerRobert Roebling <robert@roebling.de>
Sat, 25 Aug 2007 20:43:20 +0000 (20:43 +0000)
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@48384 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

src/gtk/dataview.cpp

index 1886cb9a88f5c2a30c491bcb8fb989a10931099e..e112270d39991ae286e4fa8260c00a36acdd5ab9 100644 (file)
@@ -1173,6 +1173,51 @@ bool wxGtkDataViewModelNotifier::Cleared()
 // wxDataViewRenderer
 // ---------------------------------------------------------
 
+static gpointer s_user_data = NULL;
+
+static void
+wxgtk_cell_editable_editing_done( GtkCellEditable *editable, 
+                                  wxDataViewRenderer *wxrenderer )
+{
+    wxDataViewColumn *column = wxrenderer->GetOwner();
+    wxDataViewCtrl *dv = column->GetOwner();
+    wxDataViewEvent event( wxEVT_COMMAND_DATAVIEW_ITEM_EDITING_DONE, dv->GetId() );
+    event.SetDataViewColumn( column );
+    event.SetModel( dv->GetModel() );
+    wxDataViewItem item( s_user_data );
+    event.SetItem( item );
+    dv->GetEventHandler()->ProcessEvent( event );
+}
+
+static void 
+wxgtk_renderer_editing_started( GtkCellRenderer *cell, GtkCellEditable *editable,
+                                gchar *path, wxDataViewRenderer *wxrenderer )
+{
+    wxDataViewColumn *column = wxrenderer->GetOwner();
+    wxDataViewCtrl *dv = column->GetOwner();
+    wxDataViewEvent event( wxEVT_COMMAND_DATAVIEW_ITEM_EDITING_STARTED, dv->GetId() );
+    event.SetDataViewColumn( column );
+    event.SetModel( dv->GetModel() );
+    GtkTreePath *tree_path = gtk_tree_path_new_from_string( path );
+    GtkTreeIter iter;
+    dv->GtkGetInternal()->get_iter( &iter, tree_path );
+    gtk_tree_path_free( tree_path );
+    wxDataViewItem item( iter.user_data );
+    event.SetItem( item );
+    dv->GetEventHandler()->ProcessEvent( event );
+
+    if (GTK_IS_CELL_EDITABLE(editable))
+    {
+        s_user_data = iter.user_data;
+    
+        g_signal_connect (GTK_CELL_EDITABLE (editable), "editing_done",
+            G_CALLBACK (wxgtk_cell_editable_editing_done),
+            (gpointer) wxrenderer );
+        
+    }
+}
+
+
 IMPLEMENT_ABSTRACT_CLASS(wxDataViewRenderer, wxDataViewRendererBase)
 
 wxDataViewRenderer::wxDataViewRenderer( const wxString &varianttype, wxDataViewCellMode mode,
@@ -1185,6 +1230,16 @@ wxDataViewRenderer::wxDataViewRenderer( const wxString &varianttype, wxDataViewC
     //       after the m_renderer pointer has been initialized
 }
 
+void wxDataViewRenderer::GtkInitHandlers()
+{
+    if (!gtk_check_version(2,6,0))
+    {
+        g_signal_connect (GTK_CELL_RENDERER(m_renderer), "editing_started",
+                   G_CALLBACK (wxgtk_renderer_editing_started),
+                   this);
+    }
+}
+
 void wxDataViewRenderer::SetMode( wxDataViewCellMode mode )
 {
     GtkCellRendererMode gtkMode;
@@ -1349,6 +1404,8 @@ wxDataViewTextRenderer::wxDataViewTextRenderer( const wxString &varianttype, wxD
         g_value_unset( &gvalue );
 
         g_signal_connect_after( m_renderer, "edited", G_CALLBACK(wxGtkTextRendererEditedCallback), this );
+        
+        GtkInitHandlers();
     }
 
     SetMode(mode);
@@ -1612,6 +1669,8 @@ bool wxDataViewCustomRenderer::Init(wxDataViewCellMode mode, int align)
     SetMode(mode);
     SetAlignment(align);
 
+    GtkInitHandlers();
+    
     return true;
 }