void FocusedAXObserverCallback(AXObserverRef Observer, AXUIElementRef Element, CFStringRef Notification, void *ContextData) { Assert(Element, "AXOBserverCallback() Element was null") window_info *Window = KWMFocus.Window; if(!Window) return; if(CFEqual(Notification, kAXTitleChangedNotification)) Window->Name = GetWindowTitle(Element); if(IsWindowFloating(Window->WID, NULL) || IsApplicationFloating(Window)) UpdateBorder("focused"); if(!IsWindowFloating(Window->WID, NULL) && KWMToggles.EnableDragAndDrop && KWMToggles.DragInProgress && CFEqual(Notification, kAXWindowMovedNotification)) { KWMToggles.DragInProgress = false; KWMTiling.FloatingWindowLst.push_back(Window->WID); RemoveWindowFromBSPTree(KWMScreen.Current, Window->WID, false, false); if(KWMMode.Focus != FocusModeDisabled && KWMMode.Focus != FocusModeAutofocus && KWMToggles.StandbyOnFloat) { KWMMode.Focus = FocusModeStandby; } } }
void FocusedAXObserverCallback(AXObserverRef Observer, AXUIElementRef Element, CFStringRef Notification, void *ContextData) { pthread_mutex_lock(&KWMThread.Lock); window_info *Window = KWMFocus.Window; if(Window && CFEqual(Notification, kAXTitleChangedNotification)) Window->Name = AXLibGetWindowTitle(Element); else if(CFEqual(Notification, kAXFocusedWindowChangedNotification)) { if(!Window || Window->WID != AXLibGetWindowID(Element)) { window_info *OSXWindow = GetWindowByID(AXLibGetWindowID(Element)); screen_info *OSXScreen = GetDisplayOfWindow(OSXWindow); if(OSXWindow && OSXScreen) { screen_info *ScreenOfWindow = GetDisplayOfWindow(Window); bool SameScreen = ScreenOfWindow == OSXScreen; if(ScreenOfWindow && !SameScreen) UpdateActiveWindowList(ScreenOfWindow); if(ScreenOfWindow && Window && GetWindowByID(Window->WID) == NULL && !SameScreen) { space_info *SpaceOfWindow = GetActiveSpaceOfScreen(ScreenOfWindow); if(SpaceOfWindow->Settings.Mode == SpaceModeBSP) RemoveWindowFromBSPTree(ScreenOfWindow, Window->WID, false, false); else if(SpaceOfWindow->Settings.Mode == SpaceModeMonocle) RemoveWindowFromMonocleTree(ScreenOfWindow, Window->WID, false, false); SpaceOfWindow->FocusedWindowID = -1; } if(!SameScreen) GiveFocusToScreen(OSXScreen->ID, NULL, false, false); SetKwmFocus(Element); if(SameScreen && !IsFocusedWindowFloating()) KWMFocus.InsertionPoint = KWMFocus.Cache; } } } else if(Window && (CFEqual(Notification, kAXWindowResizedNotification) || CFEqual(Notification, kAXWindowMovedNotification))) { if(KWMTiling.LockToContainer) LockWindowToContainerSize(Window); UpdateBorder("focused"); } else if(CFEqual(Notification, kAXUIElementDestroyedNotification) || CFEqual(Notification, kAXWindowMiniaturizedNotification)) { UpdateBorder("focused"); } pthread_mutex_unlock(&KWMThread.Lock); }
void FocusedAXObserverCallback(AXObserverRef Observer, AXUIElementRef Element, CFStringRef Notification, void *ContextData) { if(KWMToggles.EnableDragAndDrop && KWMToggles.DragInProgress && CFEqual(Notification, kAXWindowMovedNotification) && !IsWindowFloating(KWMFocus.Window->WID, NULL)) { KWMToggles.DragInProgress = false; KWMTiling.FloatingWindowLst.push_back(KWMFocus.Window->WID); RemoveWindowFromBSPTree(KWMScreen.Current, KWMFocus.Window->WID, false, false); if(KWMMode.Focus != FocusModeDisabled && KWMMode.Focus != FocusModeAutofocus && KWMToggles.StandbyOnFloat) KWMMode.Focus = FocusModeStandby; } if(CFEqual(Notification, kAXTitleChangedNotification) && KWMFocus.Window) KWMFocus.Window->Name = GetWindowTitle(Element); if(IsFocusedWindowFloating()) UpdateBorder("focused"); }