5/10/2013

Tüm masaüstü ortamlarına uyumlu durum simgesi

Geçtiğimiz hafta staj görüşmesi için İstanbul'daydım, bu koşturmacanın arasında GSoC başvurusunu da ekleyince günler oldukça yoğun geçti, dönüşte de bilgisayarın adaptörü bozulunca birkaç günü de internetten sipariş ettiğim adaptörün gelmesini beklemekle geçirdim. Bu süre içerisinde çalışmaya ve blog yazmaya fırsat bulamadım fakat sonunda her şeyin yoluna girmesiyle işimin başına döndüm.

"Son adımlar hep daha çok zaman alır." sözünü bu hafta bir kez daha tekrarladım kendi kendime, eğer bir masaüstü uygulaması geliştiriyorsanız "çok" bu durumu ifade etmek için yetmeyebiliyor, çünkü Linux dünyasında her şeyden bir sürü var, bir sürü dağıtım, bir sürü masaüstü ortamı, ve bir sürü test edilecek ortam dolayısıyla bir sürü muhtemel sorun.

Bildiğiniz gibi geliştirdiğim uygulamanın simgesinin sistem çubuğunda görünmesi gerekiyor. Bununla ilgili iki temel sorunla karşılaştım.

1) Dağıtımların bu simgeleri oluşturmak için standart bir kütüphane kullanmaması.

Aslında bu tam olarak doğru değil Free Desktop'un bu konuda bir system tray standartı var ve Gtk kütüphanesindeki StatusIcon ile kullanılabiliyor fakat Canonical şirketi bunu yeterli görmemiş olacak ki libindicator isminde bir kütüphane ile birlikte hayatımıza Indicator kavramını sokmuş. Unity masaüstü ortamında Indicatorler sorunsuz görüntülenebilirken tray icon'lar için bir whitelist mekanizması uygulanıyor. Diğer masaüstü ortamlarının neredeyse hepsi sorunsuz şekilde tray icon gösteriyor eğer libindicator kuruluysa Indicatorleri de gösterebiliyorlar, fakat Ubuntu harici dağıtımlarda bu kütüphane kurulu gelmiyor. Bu durumda uygulamayı iki durumda da çalışacak şekilde değiştirmem gerekti, kodlama yönünden oldukça basit bir işti fakat bunu test etmek oldukça zahmetledi oldu. Sonunda eğer varsa libindicator yoksa sadece klasik tray icon oluşturacak şekilde çalıştırmayı başardım. Bu konuda danışmanımın bulup gösterdiği örnekler de oldukça yol gösterici oldu.

2) Her masaüstü ortamının değişik boyutlarda simge istemesi.

Eğer yolunuz /usr/share/icons içerisine düştüyse görmüşsünüzdür ki oldukça garip bir dizin hiyerarşisi var. Bir sürü simge seti ve bunlara ait bir sürü alt klasör. Bu simge setlerinden bazıları tüm dağıtımlarda standart (örneğin locolor ve hicolor) eğer uygulama geliştiricisiyseniz simgenizi bu klasörlere atmanız faydalı olacaktır. Fakat bu simge setinde de her birinin içerisinde 16x16 dan başlayarak 256x256 ya kadar değişik boyutlarda simgelerin bulunduğu alt klasörler mevcut simgeyi bir tanesine atmanız çoğu zaman sorunu çözmüyor. Bu konuda çağa uygun bir hareket yaparak svg kullandım. Bu sayede Unity'nin 22x22 simgeleri göstermesi, gnome-shell'in 64x64 simgeleri göstermesi gibi gereksiz detaylardan kurtulmuş oldum.

Eğer uygulamanız için svg simge arıyorsanız The Noun Project'e bakmanızı öneririm, içerisinde binlerce vektörel public domain simgenin bulunduğu mükemmel bir arşiv. Bu simgelerden bir tanesini seçip Inkscape üzerinde biraz oynama yaptıktan sonra uygulamaya ekledim.

Fedora ve Ubuntu üzerinde çeşitli masaüstü ortamlarında testlerimi sürdürüyorum, bu aşamada sorun kalmadığına yeterince tatmin olduktan sonra paketlemeye geçmiş olacağım ve bir sonraki yazımda da paketleme sürecinden bahsetmeyi düşünüyorum.

0 yorum:

Yorum Gönder