Tauri 2 kullanarak menü çubuğu uygulamaları geliştirmek, ilk bakışta basit gibi görünse de aslında oldukça fazla kenar durum ve dikkat gerektiren ayrıntılar içeriyor. Menü çubuğu uygulamaları genellikle sadece bir simge ve açılır pencere olarak algılanır, ancak arka planda karmaşık davranışlar ve ayarlar gerektirebilir. 8 yıldır solo geliştirici olarak 7 Mac uygulaması yayınlamış biri olarak, bu süreçte karşılaştığım zorlukları ve çözümleri sizinle paylaşmak istiyorum.
Tauri 2’nin Temel Menü Çubuğu Desteği
Tauri 2, menü çubuğu uygulamaları için yerleşik destek sunuyor, ancak bazı kritik özelliklerin manuel olarak yapılandırılması gerekiyor. Temel kurulum aşağıdaki gibi yapılabilir:
use tauri::{ tray::{TrayIconBuilder, TrayIconEvent}, Manager, };
TrayIconBuilder::new()
.icon(app.default_window_icon().unwrap().clone())
.on_tray_icon_event(|tray, event| {
if let TrayIconEvent::Click { .. } = event {
// Pencereyi göster/gizle
}
})
.build(app)?;Bu kod parçası, menü çubuğu simgesini oluşturur ve tıklama olaylarını dinleyerek pencerenin gösterilmesini veya gizlenmesini sağlar. Ancak, bu sadece başlangıç noktasıdır.
Dock ve Uygulama Geçişçisinde Gizleme
Menü çubuğu uygulamalarının en büyük dezavantajlarından biri, kullanıcıların uygulamayı Dock’ta veya Cmd+Tab ile açılan uygulama geçişçisinde görmesidir. Bu durum, kullanıcı deneyimini olumsuz etkileyebilir. Bu sorunu çözmek için uygulamanın Info.plist dosyasında aşağıdaki ayarı yapmanız gerekiyor:
LSUIElementAlternatif olarak, Tauri’nin yapılandırma dosyasında (tauri.conf.json) bu ayarı aşağıdaki gibi ekleyebilirsiniz:
{
"bundle": {
"macOS": {
"infoPlist": {
"LSUIElement": true
}
}
}
}Bu ayar uygulamanın Dock’ta görünmesini engeller ve kullanıcıların sadece menü çubuğundaki simgeyi görmesini sağlar.
Pencereyi Simgeye Yakın Konumlandırma
Tauri 2, pencereyi otomatik olarak menü çubuğu simgesine yakın konumlandırmıyor. Bu, kullanıcı deneyimi açısından önemli bir eksiklik. Pencerenin simgeye yakın konumlanmasını sağlamak için aşağıdaki kodu kullanabilirsiniz:
fn pencereyi_simgeye_yakin_konumla(
pencere: &WebviewWindow,
simge_konumu: &tauri::PhysicalRect
) {
let pencere_boyutu = pencere.outer_size().unwrap();
let x = simge_konumu.position.x + (simge_konumu.size.width as i32 / 2) -
(pencere_boyutu.width as i32 / 2);
let y = simge_konumu.position.y + simge_konumu.size.height as i32;
pencere.set_position(tauri::PhysicalPosition::new(x, y)).ok();
}Bu kod, pencerenin yatay olarak simgenin ortasına, dikey olarak ise simgenin altında açılmasını sağlar. Ayrıca, ikincil monitörlerde pencerenin ekran dışında kalmasını önlemek için ekran kenarlarını da kontrol etmek önemlidir.
Pencereyi Göster/Gizle ve Yeniden Oluşturma Yaklaşımı
Menü çubuğu uygulamalarında pencereyi göster/gizle ve yeniden oluşturma olmak üzere iki farklı yaklaşım tercih edilebilir. Her ikisinin de avantajları ve dezavantajları bulunmaktadır.
- Göster/Gizle: Pencere bellekte kalır ve kullanıcıya daha hızlı yanıt verir. Uygulama durumunun korunmasını sağlar.
- Yeniden Oluşturma: Pencere her açıldığında sıfırdan oluşturulur. Bu, uygulamaların taze bir başlangıç yapmasını sağlar, ancak eski donanımlarda performansı olumsuz etkileyebilir.
Kişisel olarak, menü çubuğu uygulamalarımda göster/gizle yaklaşımını tercih ediyorum. Uygulama durumunun korunması, kullanıcı deneyimini önemli ölçüde iyileştiriyor.
if pencere.is_visible().unwrap_or(false) {
pencere.hide().ok();
} else {
pencere.show().ok();
pencere.set_focus().ok();
}Odak Kaybı Durumunda Pencereyi Otomatik Gizleme
Kullanıcılar, menü çubuğu uygulamalarından beklenen bir davranış olarak, pencereye tıkladıktan sonra başka bir yere tıkladıklarında pencerenin otomatik olarak gizlenmesini bekler. Bu davranışı sağlamak için aşağıdaki kodu kullanabilirsiniz:
pencere.on_window_event(|olay| {
if let WindowEvent::Focused(false) = olay {
pencere.hide().ok();
}
});Ancak, bu yaklaşımın bir kenar durumu bulunmaktadır: pencereye bağlı bir diyalog penceresinin (örneğin dosya seçici) açılması durumunda, ana pencere odak kaybı nedeniyle otomatik olarak gizlenebilir. Bu sorunu önlemek için, bir bayrak kullanarak çocuk pencere açıkken otomatik gizlemeyi devre dışı bırakabilirsiniz.
Sonuç: Tauri 2 ile Menü Çubuğu Uygulamaları Geliştirmenin Sırları
Tauri 2, menü çubuğu uygulamaları geliştirmek için oldukça iyi bir destek sunuyor. Ancak, pencere konumlandırma, otomatik gizleme davranışı ve LSUIElement ayarı gibi kritik konuların belgelerde tek bir yerde ele alınmamış olması, geliştiriciler için zorluk oluşturabiliyor. Neyse ki, bu sorunların hepsi çözülebilir nitelikte ve doğru yaklaşımlarla uygulamanızın kullanıcı dostu ve sorunsuz çalışmasını sağlayabilirsiniz.
Eğer bu ipuçları size yardımcı olduysa, bir kalp emojisi bırakmanız büyük bir fark yaratabilir. Teşekkürler!
Yapay zeka özeti
Tauri 2 kullanarak menü çubuğu uygulamaları geliştirirken karşılaşılan kritik ayrıntıları öğrenin. Uygulamanızın kullanıcı dostu ve sorunsuz çalışmasını sağlayacak ipuçları burada.