Domanda

Sto cercando di mettere insieme un pacchetto semplice segnalazione degli errori. Se i miei principali programma va in crash, fa risparmiare un crashlog, poi inizia un programma di giornalista. Il programma giornalista chiede all'utente se è possibile inviare il crash log per me, poi lo fa. Sto usando NSRunAlertPanel per creare una finestra di messaggio di base.

Per qualche ragione, che la finestra di messaggio sta rivelando sepolto sotto tutte le altre finestre che possono essere aperti. Eseguire il pacchetto principale da una finestra del Finder, si presenta sulla parte superiore, costringerlo a crash, la finestra giornalista si presenta dietro la finestra del Finder.

Perché succede questo, e come può essere risolto?

test case Minimal:

#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];
} 

Costruito con:

g++ test.mm -framework AppKit && ./a.out
È stato utile?

Soluzione

mi sembra di avere venire con una soluzione, distillato da molte pagine web tangenzialmente-correlato:

#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];
} 

Io non pretendo di capire questo - è programmazione cargo cult al suo culmine. risposte migliori, o spiegazioni di ciò che ogni passo fa, sarebbe molto apprezzato.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top