amiga-news ENGLISH VERSION
.
Links| Forum| Kommentare| News melden
.
Chat| Umfragen| Newsticker| Archiv
.

amiga-news.de Forum > Programmierung > Fenster hinter einem anderen Fenster? [ - Suche - Neue Beiträge - Registrieren - Login - ]

-1- [ - Beitrag schreiben - ]

20.01.2007, 12:33 Uhr

whose
Posts: 2156
Nutzer
Hallo!

Ich suche nach einer Möglichkeit festzustellen, ob nach einem CHANGEWINDOW-Event (ausgelöst durch einen Klick auf das Depth-Arrangement-Gadget) mein Fenster nach hinten oder nach vorne gesetzt wurde. Die üblichen Anlaufstellen geben dazu leider recht wenig her :(

Die Window-Liste der Screen-Struktur ist ja leider nicht nach Reihenfolge im "Stapel" sortiert und im LayerInfo finde ich irgendwie auch nichts, was einem da weiterhelfen könnte...

Gibt es einen "sanktionierten" Weg, die Position meines Fensters innerhalb des "Layer-Stapels" des Screens zu ermitteln?

Grüße

--
---

:boing: µA1 PPC 750GX-800
:boing: A4000 PPC 604e-233

[ - Antworten - Zitieren - Direktlink - ]

20.01.2007, 14:19 Uhr

Holger
Posts: 8116
Nutzer
Zitat:
Original von whose:
Die Window-Liste der Screen-Struktur ist ja leider nicht nach Reihenfolge im "Stapel" sortiert und im LayerInfo finde ich irgendwie auch nichts, was einem da weiterhelfen könnte...

Gibt es einen "sanktionierten" Weg, die Position meines Fensters innerhalb des "Layer-Stapels" des Screens zu ermitteln?


Hmm, LayerInfo->li_top_layer zeigt imho schon auf den vordersten Layer und dann sollten die alle in der richtigen Reihenfolge verknüpft sein.

Ein Problem dabei ist allerdings die Definition von "vorne" und "hinten". Aus Sicht des Depth-Gadgets ist ein Fenster "vorn", wenn es von keinem anderen verdeckt wird, muss also nicht zwangsläufig das erste in der Liste sein. Dann wird es beim Single-Klick nach "hinten" gelegt, also hinter den letzten non-backdrop layer. Aber selbst da könnte theoretisch eine andere Position in der Liste als akzeptabel eingestuft werden, solange alle Layer, die es von den bounds her verdecken könnte, vor dem rearragierten Layer liegen.

Letztendlich ist ein Layer "vorn", wenn es kein Clipping aufgrund anderer Layer gibt.

Daraus ergibt sich auch die einfachste Art herauszufinden, wohin der Layer gelegt wurde: Wenn bei einem Simple-Refresh Layer/Fenster direkt nach dem Arrangement ein IDCMP_REFRESHWINDOW folgt, wurde es noch vorne gelegt, kommt keines, dann nach hinten. Sollte die IDCMP_CHANGEWINDOW vor dem IDCMP_REFRESHWINDOW verschickt werden, kann man auch das Layer-Damage Flag überprüfen...

mfg
--
Good coders do not comment. What was hard to write should be hard to read too.

[ - Antworten - Zitieren - Direktlink - ]

20.01.2007, 17:41 Uhr

whose
Posts: 2156
Nutzer
Zitat:
Original von Holger:
Daraus ergibt sich auch die einfachste Art herauszufinden, wohin der Layer gelegt wurde: Wenn bei einem Simple-Refresh Layer/Fenster direkt nach dem Arrangement ein IDCMP_REFRESHWINDOW folgt, wurde es noch vorne gelegt, kommt keines, dann nach hinten. Sollte die IDCMP_CHANGEWINDOW vor dem IDCMP_REFRESHWINDOW verschickt werden, kann man auch das Layer-Damage Flag überprüfen...


Hmm... dann müßte ich also schauen, ob nach dem IDCMP_CHANGEWINDOW Layer Damage vorliegt (und somit ein IDCMP_REFRESHWINDOW am Port). Wenn nicht, ist das Fenster "nach hinten" gelegt worden.

"Nur" nach IDCMP_REFRESHWINDOW schauen würde die Sache wohl etwas verkomplizieren, weil ja nicht gesichert ist, daß eine Message am IDCMP auf IDCMP_CHANGEWINDOW folgt.

Sehe ich das so richtig?

Grüße

--
---

:boing: µA1 PPC 750GX-800
:boing: A4000 PPC 604e-233

[ - Antworten - Zitieren - Direktlink - ]

21.01.2007, 13:32 Uhr

whose
Posts: 2156
Nutzer
Ich denke, ich habs jetzt. Ich überprüfe nach einem IDCMP_CHANGEWINDOW
win->WLayer->Flags auf "LAYERIREFRESH2". Wenn das zutrifft, wurde das Fenster nach vorne geholt, wenn nicht, liegt es hinten.

Blöderweise wird es nicht konkret angezeigt, wenn gar kein Layer "davor" liegt, aber es hilft schon mal weiter.

Danke für den Fingerzeig :)

Grüße

--
---

:boing: µA1 PPC 750GX-800
:boing: A4000 PPC 604e-233

[ - Antworten - Zitieren - Direktlink - ]

21.01.2007, 17:03 Uhr

Holger
Posts: 8116
Nutzer
Zitat:
Original von whose:
"Nur" nach IDCMP_REFRESHWINDOW schauen würde die Sache wohl etwas verkomplizieren, weil ja nicht gesichert ist, daß eine Message am IDCMP auf IDCMP_CHANGEWINDOW folgt.

Wenn IDCMP_CHANGEWINDOW gesendet wurde, dann ist das eine Folge einer Intuition-Operation. In dem Fall wird immer ein IDCMP_REFRESHWINDOW gesendet, wenn die Operation ein Layer-Damage verursacht hat. Das ist sicher. Ob es eine Garantie dafür gibt, dass IDCMP_CHANGEWINDOW immer vor dem IDCMP_REFRESHWINDOW gesendet wird, weiß ich nicht. Ich vermute es aber, da es andersherum keinen Sinn macht, einem Programm die Information, dass ein Refresh durch Window-Stacking verursacht wurde, vorzuenthalten, wenn es explizit nach notify-depth gefragt hat.

Falls Du meinst, dass man ja keine weitere Message bekommt, wenn das Fenster nach hinten gelegt wurde, dafür bieten sich intui-ticks an.

mfg

--
Good coders do not comment. What was hard to write should be hard to read too.

[ - Antworten - Zitieren - Direktlink - ]


-1- [ - Beitrag schreiben - ]


amiga-news.de Forum > Programmierung > Fenster hinter einem anderen Fenster? [ - Suche - Neue Beiträge - Registrieren - Login - ]


.
Impressum | Datenschutzerklärung | Netiquette | Werbung | Kontakt
Copyright © 1998-2024 by amiga-news.de - alle Rechte vorbehalten.
.