Page 1 of 1
Nástrojové pluginy neposlouchají Always on Top Salamanderu
Posted: 11 Mar 2009, 12:10
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.
Posted: 12 Mar 2009, 09:59
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);
Posted: 12 Mar 2009, 16:10
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á).
Posted: 12 Mar 2009, 17:02
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í.
Re: Nástrojové pluginy neposlouchají Always on Top Salamanderu
Posted: 13 Mar 2009, 15:22
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.