Nástrojové pluginy neposlouchají Always on Top Salamanderu

Hlášení chyb a problémů programu Altap Salamander. Buďte, prosím, ve svých popisech co nejpodrobnější a vytvořte pro každý incident nový příspěvek. Nevkládejte programem generovaná hlášení o pádu programu, pošlete je e-mailem.
User avatar
zarevak
Plugin Developer
Plugin Developer
Posts: 789
Joined: 04 Feb 2006, 16:49
Location: Prague, Czech Republic

Nástrojové pluginy neposlouchají Always on Top Salamanderu

Post by zarevak »

Právě doplňuji podporu správného otevírání oken pro DiskMap plugin a zjištuji, že oficiální pluginy Salamanderu neposlouchají nastavení Always on Top a skončí tak pod oknem Salamanderu. Viewery fungují správně, protože součástí jejich Plugin Interface je předání informace o nastavení Always on Top.

Postižené pluginy: (všechny, které tvoří normální okno) Check Version, Renamer, File Comparator, PictView v režimu zorbazení Schránky, ...

Pro zjištění WS_EX_TOPMOST používám GetWindowLongPtr (pokud funkce selže, vrátí 0 a Always on Top není nastaveno):

Code: Select all

alwaysOnTop = (GetWindowLongPtr(hWndSalamander, GWL_EXSTYLE) & WS_EX_TOPMOST) != 0;
Mimochodem: Žádný plugin (ani Viewery) nepodporují změnu nastavení Always on Top během otevření svého okna. Pokud by bylo třeba, měla by vzniknout nová událost Salamanderu o změně tohoto nastavení, aby se otevřená okna pluginů mohla přizpůsobit.
Jan Rysavy
ALTAP Staff
ALTAP Staff
Posts: 5231
Joined: 08 Dec 2005, 06:34
Location: Novy Bor, Czech Republic
Contact:

Post by Jan Rysavy »

Díky za informaci, mrknu se časem na to.

Detekovat AlwaysOnTop by chtělo pomocí CSalamanderGeneralAbstract::GetConfigParameter() SALCFG_ALWAYSONTOP, a změnu pomocí CPluginInterfaceAbstract::Event() PLUGINEVENT_CONFIGURATIONCHANGED. Koukám ale, že se při přepnutí AlwaysOnTop tato událost nerozesílá, což je chyba. Opravím.

Code: Select all

AlwaysOnTop = FALSE;
SalamanderGeneral->GetConfigParameter(SALCFG_ALWAYSONTOP, &AlwaysOnTop, sizeof(AlwaysOnTop), NULL);
User avatar
zarevak
Plugin Developer
Plugin Developer
Posts: 789
Joined: 04 Feb 2006, 16:49
Location: Prague, Czech Republic

Post by zarevak »

Drobný dotaz z hlediska vývojáře pluginů:
Pokud Salamander pošle PLUGINEVENT_CONFIGURATIONCHANGED v reakci na změnu Always On Top, jak se mají přenastavit otevřená okna? (Zatím simuluji položkou v menu)

V demopluginu je uvedeno toto:

Code: Select all

// POZNAMKA: na existujicim okne/dialogu je da top-most zaridit jednoduse:
SetWindowPos(HWindow, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE);
Bohužel s tímto se okno pluginu dostane na popředí... Po přidání parametru SWP_NOACTIVATE se okno pluginu nestane aktivní, ale přesto se dostane na popředí a schová Salamander (4.pád: hrad/les).

Zkoušel jsem pro nastavení použít i SetWindowLongPtr, ale to vypadá, že nemá žádný účinek (možná je třeba volat nějakou další funknci, aby se nové parametry vzaly v potaz - ShowWindow s SW_SHOWNA nepomáhá).
Jan Rysavy
ALTAP Staff
ALTAP Staff
Posts: 5231
Joined: 08 Dec 2005, 06:34
Location: Novy Bor, Czech Republic
Contact:

Post by Jan Rysavy »

Ještě jsme to (po ICQ) rozmysleli a závěr je takový, že zatím změnu AlwaysOnTop řešit nebudeme. Pouze opravíme hlášenou chybu, kdy ne všechna okna AlwaysOnTop ctí.
Jan Rysavy
ALTAP Staff
ALTAP Staff
Posts: 5231
Joined: 08 Dec 2005, 06:34
Location: Novy Bor, Czech Republic
Contact:

Re: Nástrojové pluginy neposlouchají Always on Top Salamanderu

Post by Jan Rysavy »

zarevak wrote:Postižené pluginy: (všechny, které tvoří normální okno) Check Version, Renamer, File Comparator, PictView v režimu zorbazení Schránky, ...
Bude opraveno v AS 2.52 beta 2.
Post Reply