int32_t PTextViewUndo(void *pobject, void *in, void *out, void *extraData) { if (!pobject || !in || !out) return B_ERROR; PView *parent = static_cast<PView*>(pobject); if (!parent) return B_BAD_TYPE; BTextView *backend = (BTextView*)parent->GetView(); PArgs *inArgs = static_cast<PArgs*>(in); uint64 id = 0; if (inArgs->FindInt64("clipid", (int64*)&id) != B_OK) return B_ERROR; PObject *obj = BROKER->FindObject(id); if (!obj || obj->GetType().ICompare("PClipboard") != 0) return B_BAD_DATA; PClipboard *clip = dynamic_cast<PClipboard*>(obj); if (backend->Window()) backend->Window()->Lock(); backend->Undo(clip->GetBackend()); if (backend->Window()) backend->Window()->Unlock(); return B_OK; }