2011-02-27 27 views
7

Aşağıdaki kod, pencere kenarlıklarını nasıl kaldırıyor? Xlib Bu nasıl (Pencere Dekorasyonunu Çıkarma) Çalışıyor?

//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); 

Şimdiye kadar bir Atom Pencere ve Ekran benzer tanımlayıcı bir tür olduğunu topladık ama İpuçları yapısı veya "_MOTIF_WM_HINTS" nereden geldiğini anlamaya olamaz. Bu kodun tümünü benim için herkes anlatabilir mi? Şimdiden teşekkürler, ell.

+0

Bu kaynak sizin yerdir? http://tonyobryan.com/index.php?article=9 – xanatos

+0

Bu, kaynağımın küçük bir parçası. İpucu yapısı başka bir yerde beyan edilmiştir, ancak burada açıklık için gösterilmiştir. Ve ben bu makaleyi okudum, ipucu yapısını açıklamıyor ("Bence bu yapı Motif'ten geldi, ama emin değilim" ...) – Ell

+0

Evet, aslında benim kaynağım, iyi bir nokta değil. – Ell

cevap

9

(eğer o :-) tahmin ok) Bu "resmi" görünüyorsun standart veya böyle her türlü gelmek zor, ama özelliği ... Motif araç geliyor gibi görünüyor _MOTIF_WM_HINTS. Bkz. the MotifZone site.

Uyarı: Aşağıda eksik, ama umut bazı ışık tutacak. XmNmwmDecorations, XmNmwmFunctions ve XmNmwmInputMode için

Dokümantasyon araç setinin fonksiyonları bu özellik, fonksiyonlar (, taşımak, yeniden boyutlandırmak ...) ve giriş modunu görünümünü kontrol etmek için kullanılan çeşitli değerlerinin bir bit maskesi olduğunu gösterir Pencere yöneticisi pencereyi vermeli/vermelidir. man vendorshell veya Oreilly Motif reference books, Vol6a chapter 16 bakınız.

Özellikleri bütün X11 şeyin bir parçasıdır. Bir pencere, üzerinde tanımlı numaralı herhangi bir özelliğe sahip olabilir. Özelliklerin bir adı vardır, ancak tüm alıcı/alıcı çağrısı için teldeki tüm dizeyi göndermekten kaçınmak için ayarlarının/ayarlarının "atom" (tür tanımlayıcısı) aracılığıyla yapılmasıdır. Properties and Atoms

anda pencere yöneticisi (varsa) gör uygun olay filtre ayarlama ve PropertyNotify etkiyen olayları, ya da sadece eşlenen aldığında penceresi olan özelliklerini inceleyerek pencere özelliğine değişiklikleri tepki (veya taşınan , ya da her neyse). Pencere yöneticisi _MOTIF_WM_HINT özelliğinin biliyorsa, o ve yorumlamak edeceğiz (umarım) ne isterseniz yapın. (Not:.. Diğer pencereler bu "PropertyNotify" olayları dinleyebilirsiniz eğer o ayrıcalık pencere yöneticisine tanınmış durumda olmadığından emin entierly veya değilim emin Sorunuzun aslında alakalı değil )

Yani Eğer pencere yöneticisi olarak gayet sürece eserler var kod _MOTIF_WM_HINTS özelliği hakkında bilir.

pencere aslında olur eser eğer emin değil MapWindow() (aracılığıyla çekilir önce XInternAtom ile bunun için atom (tanımlayıcı/kısayol) görüp XChangeProperty() aracılığıyla değerini belirleyerek başlangıç pencerenizin müdürü) bağlı olabilir MapWindow(), sonra yap.

[Düzenleme:. Sıfıra .decorations kısmını ayarlayarak tüm dekorasyon bitleri temizler, bu nedenle bu pencere yöneticisi aslında, yalnız sınırlar cehennemi terk etmesini ister]

Ben "bir yere ile gelip olamaz Resmi "bu yapının tanımı ile. Openmotif-2.3.3 dağılımının lib/X11/MwmUtils.h dosyasında tanımlanmıştır. .flags girişinin nasıl kullanıldığından emin değilim (benim için hayatın kodunu bulamıyorum: - /) ancak, {decoration, function, inputMode} "alt özelliklerinin" hangisinin olduğunu belirtmek için kullandığından şüpheliyim harekete geçiyor. (Bunun için sözümü tutmayın.

Bir yan not olarak, _MOTIF_WM_HINTS kullanımı şu anda en iyi seçenek olmayabilir . Extended Window Manager hints specification ve diğer bilgi/standartlar/taslaklara freedesktop üzerinden baktınız mı? En çok "modern" pencere yöneticileri/masaüstü ortamları/mutfak lavaboları bahse girerim Motif ile geriye dönük uyumluluk sağlamaktan ziyade buna uymaya eğilimlidir. Hepsi sanırım kodladığın şeye bağlı.

Okuma için teşekkürler :-)

+0

Tüm bu ipuçları için teşekkürler ve bana verdiğiniz tüm bağlantılara bakacağım! – Ell

+1

+1 çok güzel bir açıklama! – Venemo