diff --git a/Kit/module/module.swift b/Kit/module/module.swift index 8b55de4c..3373d11c 100644 --- a/Kit/module/module.swift +++ b/Kit/module/module.swift @@ -282,7 +282,13 @@ open class Module: Module_p { let openedWindows = NSApplication.shared.windows.filter{ $0 is NSPanel } openedWindows.forEach{ $0.setIsVisible(false) } - if popup.occlusionState.rawValue == 8192 { + var reopen: Bool = false + if let widget = notification.userInfo?["widget"] as? widget_t { + reopen = popup.openedBy != nil && popup.openedBy != widget + popup.openedBy = widget + } + + if popup.occlusionState.rawValue == 8192 || reopen { NSApplication.shared.activate(ignoringOtherApps: true) popup.contentView?.invalidateIntrinsicContentSize() @@ -300,6 +306,7 @@ open class Module: Module_p { popup.setIsVisible(true) } else { popup.locked = false + popup.openedBy = nil popup.setIsVisible(false) } } diff --git a/Kit/module/popup.swift b/Kit/module/popup.swift index 5957e069..18c57e30 100644 --- a/Kit/module/popup.swift +++ b/Kit/module/popup.swift @@ -19,6 +19,7 @@ public protocol Popup_p: NSView { internal class PopupWindow: NSWindow, NSWindowDelegate { private let viewController: PopupViewController = PopupViewController() internal var locked: Bool = false + internal var openedBy: widget_t? = nil init(title: String, view: Popup_p?, visibilityCallback: @escaping (_ state: Bool) -> Void) { self.viewController.setup(title: title, view: view) diff --git a/Kit/module/widget.swift b/Kit/module/widget.swift index bb4f2f9e..47eadd6d 100644 --- a/Kit/module/widget.swift +++ b/Kit/module/widget.swift @@ -327,6 +327,7 @@ public class Widget { if let item = self.menuBarItem, let window = item.button?.window { NotificationCenter.default.post(name: .togglePopup, object: nil, userInfo: [ "module": self.module, + "widget": self.type, "origin": window.frame.origin, "center": window.frame.width/2 ])