Register() public method

public Register ( NDesk.DBus.Bus bus ) : void
bus NDesk.DBus.Bus
return void
Beispiel #1
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);
			}
		}