private void handleAccessibleChildEvent(OoAccessibleDocWnd doc, object p, uno.Any newValue, uno.Any oldValue) { Task t = new Task(() => { util.Debug.GetAllInterfacesOfObject(p); if (doc != null && !newValue.hasValue() && oldValue.hasValue()) { // shape was deleted! var oldShapeAcc = oldValue.Value; util.Debug.GetAllInterfacesOfObject(oldShapeAcc); if (p != null && p is XAccessibleComponent) { var shapeObs = doc.GetRegisteredShapeObserver(p as XAccessibleComponent); if (shapeObs != null && !shapeObs.IsValid(true)) { shapeObs.Dispose(); } else { doc.Update(); } } } }); t.Start(); }
private void handleChild(object sender, uno.Any newValue, uno.Any oldValue) { System.Diagnostics.Debug.WriteLine("[INFO] OoDrawPagesObserver: handle accessible child ID"); if (newValue.hasValue()) { if (oldValue.hasValue()) // change { //System.Diagnostics.Debug.WriteLine("child changed"); } else // added { addNewShape(newValue.Value as XAccessible); } } //else if (oldValue.hasValue() && oldValue.Value is XAccessible) //{ // // FIXME: this does not work properly because sometimes the page itself do this and there is no way to check if this is the page. // // So we have to leave the corresponding shape and its observer as a dead body in the lists ... // // Maybe the OoShapeObeservers can detect their disposing by their own and handle a clean up of the lists // //// child deleted; // ////System.Diagnostics.Debug.WriteLine("child deleted"); // //XAccessible oldValAcc = oldValue.Value as XAccessible; // //if (oldValAcc != null) // //{ // // if (accshapes.ContainsKey((oldValAcc.getAccessibleContext()))) // // { // // //TODO: remove .... // // System.Diagnostics.Debug.WriteLine("have to remove observer"); // // } // // else // // { // // string Name = OoAccessibility.GetAccessibleName(oldValAcc); // // if (shapes.ContainsKey(Name)) // // { // // removeChild(shapes[Name]); // // } // // } // //} //} }