2011-02-27 13 views
7

W jaki sposób następujący kod usuwa obramowanie okna?Xlib Jak to działa (usuwanie dekoracji okna)?

//note the struct is declared elsewhere, is here just for clarity. 
//code is from [http://tonyobryan.com/index.php?article=9][1] 
typedef struct Hints 
{ 
    unsigned long flags; 
    unsigned long functions; 
    unsigned long decorations; 
    long   inputMode; 
    unsigned long status; 
} Hints; 

//code to remove decoration 
Hints hints; 
Atom property; 
hints.flags = 2; 
hints.decorations = 0; 
property = XInternAtom(display, "_MOTIF_WM_HINTS", true); 
XChangeProperty(display,window,property,property,32,PropModeReplace,(unsigned char *)&hints,5); 
XMapWindow(display, window); 

Do tej pory zebraliśmy że Atom jest rodzajem identyfikatora podobny do okna i reklamowej, ale nie mogę dowiedzieć się, gdzie przyszła struktura wskazówki lub „_MOTIF_WM_HINTS” od. Czy ktoś może mi wyjaśnić cały ten kod? Z góry dziękuję, ell.

+0

To jest Twoje źródło lub miejsce docelowe? http://tonyobryan.com/index.php?article=9 – xanatos

+0

To jest mały fragment mojego źródła. Struktura podpowiedzi jest zadeklarowana w innym miejscu, ale jest tu pokazana dla jasności. I przeczytałem ten artykuł, nie wyjaśnia on struktury podpowiedzi ("Myślę, że ta struktura pochodziła z Motif, ale nie jestem pewna" ...) – Ell

+0

Tak, to nie jest moje źródło, dobry punkt. – Ell

Odpowiedz

9

To trudne do zdobycia jakiegokolwiek rodzaju „oficjalnej” -looking standardzie lub takie, ale _MOTIF_WM_HINTS nieruchomość wydaje się pochodzić z zestawu narzędzi ... Motif (ok, domyślić, że :-)). Zobacz the MotifZone site.

Ostrzeżenie: co następuje jest niepełne, ale powinien rzucić trochę światła, mam nadzieję.

Dokumentacja dla XmNmwmDecorations, XmNmwmFunctions i XmNmwmInputMode funkcje zestawu narzędzi wskazuje, że nieruchomość jest maską bitową różnych wartości używanych do sterowania wygląd, funkcje (zmiana rozmiaru, przenoszenie, ...) i wejścia w tryb że Menedżer okien powinien dostarczyć/podać okno. Patrz man vendorshell lub Oreilly Motif reference books, Vol6a chapter 16.

Właściwości są częścią całej rzeczy X11. Okno może mieć dowolną liczbę zdefiniowanych na nim właściwości . Właściwości mają nazwę, ale ustawienie/uzyskanie właściwości odbywa się za pomocą "atomu" (identyfikator sortowania), aby uniknąć wysyłania całego ciągu na drucie dla każdego wywołania get/set. Zobacz Properties and Atoms

Aktualnie menedżer okien (jeśli w ogóle) może reagować na właściwości window zmian poprzez ustawienie odpowiedniego filtra zdarzeń i działając na PropertyNotify zdarzeń, lub po prostu kontrolowanie właściwości okno ma kiedy zostanie odwzorowany (lub przeniesiony , lub cokolwiek). Jeśli menedżer okien zna właściwość _MOTIF_WM_HINT, będzie interpretował te wartości i (miejmy nadzieję) robił to, co chcesz. (Uwaga:.. Nie jestem entierly pewien, czy to przywilej jest przekazywane do kierownika okno , lub jeśli inne okna może słuchać tych wydarzeń „PropertyNotify” Nie pewność, że rzeczywiście pasuje do Twojego pytania)

Tak kod, który masz działa dobrze, o ile twój menedżer okien zna o właściwości _MOTIF_WM_HINTS.

zacząć od uzyskania atom (identyfikator/skrótu) za to XInternAtom i ustawienie jego wartości poprzez XChangeProperty() zanim okno jest rzeczywiście wyciągnąć poprzez MapWindow() (nie wiem, czy to będzie działać, jeśli zrób to po MapWindow(), które może zależeć od twojego menadżera okna: ).

[Edit. Ustawiania część .decorations zero usuwa wszystkie bity dekoracji, więc wnioskuje, że menedżer okien zostawić swoje granice piekło sam, zasadniczo]

nie mogę wymyślić czegoś " urzędowy "z definicją tej struktury. Jest zdefiniowany w lib/X11/MwmUtils.h dystrybucji openmotif-2.3.3. Nie jestem pewien, w jaki sposób użyto wpisu .flags (nie mogę znaleźć kodu dla mojego życia: - /), ale podejrzewam, że jest on używany do wskazania, które z pod-właściwości {decoration, function, inputMode} "jesteś działając na. (Nie wierz mi na słowo.)

Na marginesie, używanie _MOTIF_WM_HINTS może nie być teraz najlepszą opcją teraz . Czy spojrzałeś na Extended Window Manager hints specification i inne informacje/standardy/wersje robocze na freedesktop? Założę się, że większość "nowoczesnych" menedżerów okien/środowisk graficznych/zlewozmywaków kuchennych będzie raczej trzymała się tego, niż zachowuje kompatybilność wsteczną z Motifem. Wszystko zależy od tego, co kodujesz.

Dzięki za przeczytanie :-)

+0

Dziękuję za wszystkie te wskazówki i zajrzę do wszystkich linków, które mi dałeś! – Ell

+1

+1 bardzo ładne wyjaśnienie! – Venemo