Inheritance: IAutomationElement
示例#1
0
        private ProviderElementWrapper GetWrapperFromPoint(
            ProviderElementWrapper root, double px, double py, bool checkRoot)
        {
            if (checkRoot &&
                (root.IsOffscreen || !root.BoundingRectangle.Contains(px, py)))
            {
                return(null);
            }
            var child = root.FirstChild;

            while (child != null)
            {
                var ret = GetWrapperFromPoint(child, px, py, true);
                if (ret != null)
                {
                    return(ret);
                }
                child = child.NextSibling;
            }
            return(root);
        }
示例#2
0
		private ProviderElementWrapper GetWrapperFromPoint (
			ProviderElementWrapper root, double px, double py, bool checkRoot)
		{
			if (checkRoot &&
			    (root.IsOffscreen || !root.BoundingRectangle.Contains (px, py)))
				return null;
			var child = root.FirstChild;
			while (child != null) {
				var ret = GetWrapperFromPoint (child, px, py, true);
				if (ret != null)
					return ret;
				child = child.NextSibling;
			}
			return root;
		}
示例#3
0
		public void RaiseStructureChangedEvent (object provider, StructureChangedEventArgs e)
		{
			IRawElementProviderSimple simpleProvider =
				provider as IRawElementProviderSimple;
			
			if (e.StructureChangeType == StructureChangeType.ChildAdded) {
				if (simpleProvider == null)
					return;

				object providerHandleObj =
					simpleProvider.GetPropertyValue (AEIds.NativeWindowHandleProperty.Id);
				IntPtr providerHandle = providerHandleObj != null ?
					(IntPtr) providerHandleObj :
					IntPtr.Zero;

				bool isRootWindow = false;
				if (ControlType.Window.Id == (int)
				    simpleProvider.GetPropertyValue (AEIds.ControlTypeProperty.Id)) {
					var fragmentProvider = simpleProvider as IRawElementProviderFragment;
					isRootWindow = fragmentProvider != null &&
						fragmentProvider == fragmentProvider.Navigate (NavigateDirection.Parent);
				}

				ProviderElementWrapper element = new ProviderElementWrapper (simpleProvider);
				element.Register (SessionBus);
				lock (providerWrapperMapping)
					providerWrapperMapping [simpleProvider] = element;
				if (providerHandle != IntPtr.Zero)
					lock (pointerProviderMapping) {
#if DEBUG
						if (pointerProviderMapping.ContainsKey (providerHandle)) {
							Log.Error ("Duplicate provider handle, {0}, {1}",
								simpleProvider.GetPropertyValue (AEIds.NameProperty.Id),
								simpleProvider.GetPropertyValue (AEIds.LocalizedControlTypeProperty.Id));
						}
#endif
						pointerProviderMapping [providerHandle] = simpleProvider;
					}
				if (isRootWindow)
					app.AddRootElement (element);

				//The event shall be raised after the provider is added to providerWrapperMapping
				app.RaiseStructureChangedEvent (simpleProvider, e);
			} else if (e.StructureChangeType == StructureChangeType.ChildRemoved) {
				//The event shall be raised before the provider is deleted from providerWrapperMapping
				app.RaiseStructureChangedEvent (simpleProvider, e);
				HandleTotalElementRemoval (simpleProvider);
			} else {
				app.RaiseStructureChangedEvent (simpleProvider, e);
			}
		}