Index: src/text/ptbl/xp/pd_DocumentRDF.cpp =================================================================== --- src/text/ptbl/xp/pd_DocumentRDF.cpp (revision 34094) +++ src/text/ptbl/xp/pd_DocumentRDF.cpp (working copy) @@ -3845,6 +3845,12 @@ std::pair< PT_DocPosition, PT_DocPosition > range ) { // + // If we know we have nothing, then we might as well just return nothing + // + if( !haveSemItems() ) + return ret; + + // // A sneaky optimization, for the first position we might have to // search backward to the start of the document to see opening // blocks and text:meta elements which might have RDF attached. Index: src/text/ptbl/xp/pd_DocumentRDF.h =================================================================== --- src/text/ptbl/xp/pd_DocumentRDF.h (revision 34094) +++ src/text/ptbl/xp/pd_DocumentRDF.h (working copy) @@ -1023,6 +1023,10 @@ void addRDFForID( const std::string& xmlid, PD_DocumentRDFMutationHandle& m ); + /** + * + * This is a very fast call if there is no RDF in use. + */ std::set< std::string >& addRelevantIDsForPosition( std::set< std::string >& ret, PT_DocPosition pos ); std::set< std::string >& addRelevantIDsForRange( std::set< std::string >& ret, Index: src/wp/ap/gtk/ap_RDFSemanticItemGTKInjected.cpp =================================================================== --- src/wp/ap/gtk/ap_RDFSemanticItemGTKInjected.cpp (revision 34094) +++ src/wp/ap/gtk/ap_RDFSemanticItemGTKInjected.cpp (working copy) @@ -110,6 +110,7 @@ void GDestroyNotify_GObjectSemItem(gpointer data) { + UT_DEBUGMSG(("GDestroyNotify_GObjectSemItem data:%p\n", data )); ap_GObjectSemItem* obj = (ap_GObjectSemItem*)data; delete obj; } @@ -124,7 +125,7 @@ void OnSemItemEdited ( GtkDialog* d, gint /*response_id*/, gpointer /*user_data*/) { - UT_DEBUGMSG(("OnSemItemEdited()\n")); + UT_DEBUGMSG(("OnSemItemEdited() d:%p\n",d)); PD_RDFSemanticItemHandle h = getHandle( d ); h->updateFromEditorData(); gtk_widget_destroy( GTK_WIDGET(d) ); @@ -134,6 +135,7 @@ void GDestroyNotify_GObjectSemItem_List(gpointer data) { + UT_DEBUGMSG(("GDestroyNotify_GObjectSemItem_List data:%p\n", data )); ap_GObjectSemItem_List* obj = (ap_GObjectSemItem_List*)data; delete obj; } Index: src/wp/ap/gtk/ap_RDFSemanticItemGTKInjected.h =================================================================== --- src/wp/ap/gtk/ap_RDFSemanticItemGTKInjected.h (revision 34094) +++ src/wp/ap/gtk/ap_RDFSemanticItemGTKInjected.h (working copy) @@ -77,7 +77,8 @@ { } - void showEditorWindow( PD_RDFSemanticItemHandle c ) +// void showEditorWindow( PD_RDFSemanticItemHandle c ) + void showEditorWindow( const PD_RDFSemanticItemHandle& c ) { UT_DEBUGMSG(("showEditorWindow(INJECTED) name:%s linksubj:%s\n", c->name().c_str(), c->linkingSubject().toString().c_str() )); @@ -92,17 +93,17 @@ G_OBJECT_SEMITEM, new ap_GObjectSemItem( c ), GDestroyNotify_GObjectSemItem ); - /* g_object_set_data_full( G_OBJECT(d), */ - /* G_OBJECT_SEMITEM, */ - /* new struct G_OBJECT_SEMITEM( c ), */ - /* GDestroyNotify_G_OBJECT_SEMITEM ); */ + g_object_set_data_full( G_OBJECT(d), + G_OBJECT_SEMITEM, + new ap_GObjectSemItem( c ), + GDestroyNotify_GObjectSemItem ); gtk_widget_reparent( w, GTK_WIDGET( gtk_dialog_get_content_area( GTK_DIALOG (d)))); g_signal_connect (G_OBJECT(d), "response", G_CALLBACK(OnSemItemEdited), c.get() ); gtk_widget_show_all (d); } - void showEditorWindow( PD_RDFSemanticItems cl ) + void showEditorWindow( const PD_RDFSemanticItems& cl ) { UT_DEBUGMSG(("showEditorWindow() list... sz:%ld\n", cl.size() )); @@ -115,7 +116,7 @@ GtkNotebook* notebook = GTK_NOTEBOOK(gtk_notebook_new()); gtk_container_add( GTK_CONTAINER(gtk_dialog_get_content_area( GTK_DIALOG (d))), GTK_WIDGET(notebook) ); - for( PD_RDFSemanticItems::iterator ci = cl.begin(); ci != cl.end(); ++ci ) + for( PD_RDFSemanticItems::const_iterator ci = cl.begin(); ci != cl.end(); ++ci ) { PD_RDFSemanticItemHandle c = *ci; GtkWidget* w = GTK_WIDGET(c->createEditor()); Index: src/wp/ap/xp/ap_Menu_Functions.cpp =================================================================== --- src/wp/ap/xp/ap_Menu_Functions.cpp (revision 34094) +++ src/wp/ap/xp/ap_Menu_Functions.cpp (working copy) @@ -672,8 +672,8 @@ UT_return_val_if_fail( rdf, EV_MIS_Gray ); /* The editors aren't working yet. Remove if they do work. */ - if (id == AP_MENU_ID_RDFANCHOR_EDITSEMITEM) - return EV_MIS_Gray; +// if (id == AP_MENU_ID_RDFANCHOR_EDITSEMITEM) +// return EV_MIS_Gray; #ifndef WITH_EVOLUTION_DATA_SERVER if (id == AP_MENU_ID_RDFANCHOR_EXPORTSEMITEM) @@ -681,10 +681,8 @@ #endif EV_Menu_ItemState s = EV_MIS_ZERO ; - return s; - - PD_RDFContacts contacts = rdf->getContacts(); +// PD_RDFContacts contacts = rdf->getContacts(); std::set< std::string > xmlids; rdf->addRelevantIDsForPosition( xmlids, pView->getPoint() );