Pregunta

Estoy tratando de armar un simple paquete de informe de errores. Si mis principales errores en el programa, se ahorra un crashlog, a continuación, inicia un programa de reportero. El programa reportero le pregunta al usuario si puede enviar el registro de bloqueo a mí, entonces lo hace. Estoy usando NSRunAlertPanel para crear un cuadro de mensaje básico.

Por alguna razón, que el cuadro de mensaje está apareciendo enterrado debajo de las demás ventanas que estén abiertas. Ejecutar el paquete principal de una ventana del Finder, se muestra en la parte superior, la fuerza que se caiga, se muestra la ventana reportero hasta detrás de la ventana del Finder.

¿Por qué está sucediendo esto, y cómo puede ser resuelto?

Mínimo caso de prueba:

#import <AppKit/AppKit.h>

int main(int a, char* av) {
  NSAutoreleasePool* pool = [[NSAutoreleasePool alloc] init];
  NSApplication* q = [[NSApplication alloc] init]; 
  NSRunAlertPanel(@"Hello", @"Aloha", @"OK", nil,nil);
  [pool release];
} 

Construido con:

g++ test.mm -framework AppKit && ./a.out
¿Fue útil?

Solución

Parece que tengo llegar a una solución, destilado de muchas páginas web tangencialmente relacionados:

#import <AppKit/AppKit.h>

int main(int a, char* av) {
  NSAutoreleasePool* pool = [[NSAutoreleasePool alloc] init];
  NSApplication* q = [[NSApplication alloc] init]; 

  ProcessSerialNumber psn = {0, kCurrentProcess};
  TransformProcessType(&psn, kProcessTransformToForegroundApplication);

  [NSApp activateIgnoringOtherApps:YES];

  NSRunAlertPanel(@"Hello", @"Aloha", @"OK", nil,nil);
  [pool release];
} 

Yo no pretendo entender esto - es la programación de culto cargo en su máxima expresión. Mejores respuestas o explicaciones de lo que hace cada paso, serían muy apreciados.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top