"nackte" Window als keyWindow

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • "nackte" Window als keyWindow

    Es ist bekannt, dass "nackte" Window (ohne title bar) nicht keyWindow werden kann,
    es antwortet also auf canBecomeKeyWindow mit NO

    nun, ich möchte es doch umgehen - ich habe in mein CustomWindow-Class das Folgende implantiert:

    - (BOOL) canBecomeKeyWindow
    {
    return YES;
    }

    und es bekommt tatsächlich keyWindow, aber in einer sehr komischen Weise - es zittert und oft hängt es sich auf.

    Ob jemand wüsste, ob es übehaupt ordentlich machbar ist und was da noch alles fehlt?
    Gruss aus Russland :)
  • Klar kann Ich warten ;)

    Indessen versuche Ich mich in das Problem zu vertiefen; Einiges habe ich im Netz bereits gefunden, aber leider noch nichts Entscheidendes;

    Das Problem (bei mir) liegt daran, dass es gleichzeitig ein normales Fenster zu sehen ist und ein "nacktes". Als das Nackte "key" bekommt, will das Normale nicht "key" loswerden - es wird nicht abgedunkelt. Das Zittern des Nackten kommt davon her, dass die beiden können sich anscheinend wegen key-Zugehörigkeit nicht einigen. Irgenwann kracht es dann.

    Ich habe kurzerhand versucht das Nackte in NSWindowController einzupacken - hat noch nichts gebracht...
    Gruss aus Russland :)
  • Habs!


    Wenn ich ein NSBorderlessWindowMask Window erzeuge, muss ich
    code:


    - (BOOL)canBecomeKeyWindow
    {
    return YES;
    }

    überschreiben und YES zurückgeben - das wars.

    Hab auch gerade mal zwei Abende drangehockt und mir den Fuß verbeult, weil ich irgendwann mal aus Wut gegen den Heitzkörper getreten hab...

    Hab den Thread gefunden, also hast du ja schon gemacht.

    Das mit dem Flackern schau ich dann nochmal nach. In meinem Projekt ist das ähnlich wie bei dir. Um ein Textfield in einer skalierbaren View zu editieren, erzeuge ich eben ein Window (Panel) das sich unabhängig von der Skalierung über dem Hauptfenster plaziert. Muss nochmal schauen wie ich das mit dem keyWindow gemacht hab....
    Seminare, Artikel, Code. ObjectiveCeeds - alles für die Apfelzucht.
  • Hmm,

    eigentlich nichts besonderes.

    Initialisierung meiner NSPanel subclass

    Quellcode

    1. -(id)initWithContentRect:(NSRect)rect styleMask:(unsigned int)styleMask backing:(NSBackingStoreType)type defer:(BOOL)def
    2. {
    3. self = [super initWithContentRect:rect styleMask:styleMask backing:type defer:def];
    4. if (self != nil) {
    5. NSRect textFrame;
    6. textFrame.size = [[self contentView]frame].size;
    7. textFrame.origin = NSMakePoint(0,0);
    8. _text = [[NSTextField alloc]initWithFrame:textFrame];
    9. [_text setBordered:NO];
    10. [_text setEditable:YES];
    11. [_text setSelectable:YES];
    12. [_text setDelegate: self];
    13. [_text setStringValue:@"Hallo"];
    14. [[self contentView]addSubview:_text];
    15. [self setHasShadow:YES];
    16. [[self contentView]display];
    17. [self setDelegate:self];
    18. }
    19. return self;
    20. }
    Alles anzeigen
    eigentlich nur das Textfeld reingemacht, dann unsere alten Bekannten:

    Quellcode

    1. -(BOOL)acceptsFirstResponder
    2. {
    3. return YES;
    4. }
    5. - (BOOL)canBecomeKeyWindow
    6. {
    7. return YES;
    8. }

    die Initialisierung mache ich in dem Fall über nen Singleton:

    Quellcode

    1. -(WLLineEditorPanel *)lineEditorPanel
    2. {
    3. if (!_lineEditor) {
    4. unsigned int mask = NSBorderlessWindowMask;
    5. _lineEditor = [[WLLineEditorPanel alloc]initWithContentRect:NSMakeRect (100,100,300,20) styleMask:mask backing:NSBackingStoreBuffered defer:YES];
    6. }
    7. return _lineEditor;
    8. }

    auch 0815. Und aktivieren

    Quellcode

    1. [[(WLDragView *)[self enclosingScrollView]lineEditorPanel] makeKeyAndOrderFront:self];
    auch 0815.

    Funktioniert fehlerfrei, ohne Flackern.

    Hast du acceptsFirstResponder überschrieben? Key Window zu sein und nicht firstResponder könnte etwas verwirren.
    Seminare, Artikel, Code. ObjectiveCeeds - alles für die Apfelzucht.
  • Ich hab's gefunden - es zittert, wenn es default button (key equviv.= <return>) hat (das möchte ich auch); wenn ich default button entferne - hört das Zittern sofort auf und ist völlig normal.

    Das letzte wäre noch herauszukriegen, warum es Anwesenheit des default buttons nicht erträgt bzw. wie es mit dem default button zu befreunden...
    Gruss aus Russland :)
  • Hallo,

    Habe ein ähnliches komisches Problem mit einem Borderless Panel.

    In dem Panel von mir tritt auch ein komisches Problem auf (hatte ich vor längerem mal gefragt, aber es konnte leider keiner helfen). Ist so ein Panel wie bei Photoshop für eine kleine Grafikanwendung (Document-based) Der Mauscursor ändert sich, wenn im Panel ein anderes Tool gewählt wird. Über dem Panel wird normalerweise immer der Pfeil angezeigt und sobald man vom Panel weg über das DocumentWindow kommt, kommt dann der richtige Tool-Cursor.

    Wenn das Panel (auch Borderless) über dem DocumentWindow schwebt, dann wechselt der MausPfeil aber schon über dem Button zum Toolwechsel solange ich den Mausknopf gedrückt halte und den Mauszeiger NICHT bewege. Bei der ersten Verschiebung wirds dann wieder ein Pfeil. Verlasse ich das Rechteck des Panels und komme mit dem Mauszeiger über das DocumentWindow wird endlich der richtige Mauszeiger dargestellt.

    Es kommt also zu einem komischen Flackern beim Toolwechsel. Ist mir auch nicht ganz klar, hängt aber auch mit dem KeyWindow-Status zusammen. Wenn ich dem Panel KeyWindow Status gebe, gehts nämlich richtig. Das will ich aber nicht...

    Jens
  • Das ist mir klar :) Ich kann leider Dir in Deinem Fall nicht direkt helfen - dazu fehlt mir einerseits Übersicht, andererseits Zeit. Ich kann Dir nur meine Erfahrung mitteilen, welche Dir eventuell indirekt helfen könnte.

    Ich habe inzwischen meinen Fall weiter untersucht und es sieht nun so aus, als ob Erneuerung der Schatten für das Flattern verantwortlich ist.
    Gruss aus Russland :)