2011-04-27 12 views
14

Próbuję napisać menedżera okien. (Faktycznie, mam napisał OS i kompilatora, ale to mija się z celem.)Nowoczesne sposoby pisania menedżera okien

xlib i xcb nie są dokładnie takie paskudne, przynajmniej nie przez, powiedzmy, standardy win32, ale są na pewno bardzo stary i nie nadają się ładnie na przyzwoite abstrakcje, aby moje życie było łatwiejsze. Co więcej, istnieje wyraźny brak dobrych wiązań dla nowoczesnych języków wysokiego poziomu.

Moje pytanie brzmi: czy te wszystkie rzeczy na niskim poziomie są obecnie naprawdę potrzebne? Czy istnieją biblioteki, które obejmą wszystkie nieprzyjemne rzeczy dla mnie? Mam mgliste wspomnienie, że ludzie oświeceni zrobili coś takiego, ale nie mogą niczego znaleźć. Czy też współczesne biblioteki widgetów, takie jak, powiedzmy, GDK mają wystarczającą funkcjonalność, że nie będę musiał dotykać warstwy Xlib?

żadnych bibliotek z wiązaniami Java są szczególnie interesujące ...

+0

Ładne pytanie. Czy nie potrzebujesz funkcji renderowania pikseli po pikselach? Może być kilka sztuczek, ale tak zacznę. – Blender

+0

Spojrzałbym na kwin, metacity, compiz i/lub oświecenie. Z mojej strony lubię niski poziom i patrzyłem tylko na WM wykonane przy użyciu surowego Xlib. Przy odrobinie szczęścia, Havoc Pennington zauważy to pytanie :) – ninjalj

+0

Haskell ma przyzwoite wiązania X11, które zostały użyte do napisania menedżera okien Xmonad. – wnoise

Odpowiedz

4

To jest późna odpowiedź, więc może tak nie jest? mają już duże znaczenie, ale mimo to opublikuję to, ponieważ inni ludzie mogą go szukać ...

Zadałem sobie to samo pytanie i doszedłem do wniosku, że nie ma czegoś takiego, szczególnie nie w Javie . Podczas gdy niektóre zestawy narzędzi do tworzenia widgetów, takie jak qt, oferują możliwość korzystania z istniejącej struktury wyświetlania i tworzenia widgetów z istniejących uchwytów okien xlib, nadal musisz użyć xlib/xcb, aby wykonać nieprzyjemne zadanie komunikacji z serwerem X dla konkretne operacje wm. Inne biblioteki, jak twierdzą inni, takie jak GDK i oświecenie, również oferują całkiem dobrą pracę z podstawową abstrakcją.

Nadal nie byłem zadowolony z faktu, że wszystkie te używają C/C++ i siedzę na moim leniwym tyłku, czekając aż ktoś wykonał dla mnie pracę w Javie, nie wchodziło w grę, zacząłem pisać własną bibliotekę która pozwala na zbudowanie własnego modułowego WM w Javie. https://github.com/Zubnix/trinityshell

+0

Jestem bardzo zainteresowany, aby to zobaczyć. Teraz jestem zanurzony w innych rzeczach, ale na pewno będę wyglądał w przyszłości. Daj nam znać, jak sobie radzisz! –

9

to wszystko rzeczy naprawdę konieczne niskiego poziomu w tych dniach?

Jeśli przez "rzeczy o niskim poziomie" masz na myśli język C, to nie, nie jest to konieczne z technicznego punktu widzenia; możesz użyć XCB XML do wygenerowania powiązań dla dowolnego języka.

Jednakże, jeśli przez "rzeczy o niskim poziomie" masz na myśli radzenie sobie na poziomie protokołu X, to tak, to jest konieczne (jeśli nie chcesz wyrywać sobie włosów). Window Manager musi działać na poziomie protokołu X11, więc użycie czegoś "wysokiego poziomu" tylko utrudni Ci życie. W rzeczywistości XCB został stworzony właśnie dlatego, że Xlib był zbyt wysoki, maskując zbyt wiele pod nim, więc łatwo było popełnić błędy i utrudnić lub uniemożliwić pełną kontrolę. (XCB również nie jest "bardzo stary" z perspektywy X. dopiero w ostatnich latach wszystkie główne dystrybucje Linuksa w końcu zaczęły w pełni korzystać z XCB.)

+1

Dobra odpowiedź. najlepsze podejście na wysokim poziomie prawdopodobnie rozpocznie się od istniejącego WM. również, można użyć opcji gnome-shell przy użyciu JavaScript.XCB i introspekcja gobject dają narzędzia do automatyzacji powiązań językowych, jeśli masz na myśli inny język. –

+0

btw, ponieważ przyszły kierunek jest taki, że WM musi działać również jako CM, a ogólnie rzecz biorąc to trochę nauki rakietowej, myślę, że byłby duży argument za użyciem części C gnome-shell i zamiany Część JavaScript (więcej lub mniej), jeśli Twoim celem jest alternatywny interfejs użytkownika. Decyzje UI powinny w dużej mierze dotyczyć JS, ale pętli malarskiej i gunge niskiego poziomu w starych bitach metacity i bitów C zagracających. –

+1

Z całym szacunkiem nie zgadzam się: nie ma zbyt wiele dla menedżerów okien, które są szczególnie egzotyczne poza specjalnymi zdarzeniami menadżera okien i XGrabKey(). Faktem jest, że odkąd opublikowałem moje pytanie, hackowałem się z gdk, a to * bardzo blisko * robi dużo, czego chcę; Mam kod, który zarządza oknami (w bardzo prymitywny sposób) prawie w całości z domeny GdkWindow. Niestety, rzeczy, których nie robi, są dość nieprzyjemne. W szczególności gdk robi bardzo dziwne rzeczy za pomocą klawiatury i jeśli XInput jest dostępny, zignoruje KeyPress i KeyRelease. Zgadnij, które zdarzenia wysyła XGrabKey()? Dobrze. –