es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Cómo hago para que mi ventana tome el enfoque de otra ventana que está siendo arrastrada en MacOS?

Actualmente estoy trabajando en una aplicación de accesibilidad cuya funcionalidad se activa al arrastrar una ventana con dos botones del ratón presionados. Mi aplicación necesita abrir una nueva ventana sin bordes y robar el enfoque de la ventana que se está arrastrando (y evitar que la ventana se arrastre más). Mi objetivo es redimensionar eventualmente la ventana arrastrada con la ayuda de la ventana que roba el enfoque. ¿Cómo lo hago?

Estoy usando el marco de trabajo Cocoa en Swift. Esto es lo que he intentado:

NSApp.activate(ignoringOtherApps: true)
myAccessibilityWindow.makeKeyAndOrderFront(nil)

La ventana de accesibilidad se ordena al frente según lo esperado, pero no roba el enfoque (no se activan eventos del ratón dentro de la ventana de accesibilidad) hasta que dejo de arrastrar la ventana activadora. Esto no es deseado, ya que necesito robar el enfoque del ratón lo antes posible y evitar que la ventana se arrastre más.

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Para robar el enfoque y evitar que la ventana se arrastre más, puedes intentar usar la propiedad NSWindow.Level para establecer la ventana de accesibilidad a un nivel más alto que la ventana que se está arrastrando. También puedes usar la clase NSCursor para establecer el cursor como el cursor de flecha cuando el mouse se encuentre sobre la ventana de accesibilidad, lo cual evitará un arrastre adicional de la ventana que se está arrastrando.

    Aquí tienes un ejemplo del código que puedes usar:

    // Establecer el nivel de la ventana de accesibilidad como superior al de la ventana que se está arrastrando
    myAccessibilityWindow.level = .popUpMenu
    
    // Establecer el cursor como el cursor de flecha cuando el mouse se encuentre sobre la ventana de accesibilidad
    let arrowCursor = NSCursor.arrow
    myAccessibilityWindow.contentView?.addCursorRect(myAccessibilityWindow.contentView!.bounds, cursor:arrowCursor)
    
    // Activar la ventana de accesibilidad y hacerla la ventana activa
    myAccessibilityWindow.makeKeyAndOrderFront(nil)
    NSApp.activate(ignoringOtherApps: true)
    

    Con este código, la ventana de accesibilidad robará el enfoque y evitará el arrastre adicional de la ventana que se está arrastrando. Sin embargo, redimensionar la ventana que se está arrastrando con la ayuda de la ventana de accesibilidad requeriría código y lógica adicionales.

Comments are closed.