Die neuen GTK 3.12 Popover in Vala
Die neuen Popovers aus GTK 3.12 sollen die klassischen Menüs ersetzen, denn sie sehen besser aus und bilden ein konsistentes Design mit den Menüs der GNOME Shell. Zudem sind sie sehr flexibel: in ihnen können viele verschiedene Widgets platziert werden.
Minimalbeispiel
Wie schon im letzten Tutorial zu HeaderBars, will ich euch die Verwendung der Popovers an einem Minimalbeispiel näherbringen. Das oben gezeigte Programm kann mit dem nur um einige Zeilen erweiterten Quelltext aus dem HeaderBar-Tutorial erzeugt werden:
Drei Dinge sind hierbei besonders zu beachten:
- Ein Popover ist immer einem Widget zugeordnet, das dem Konstruktor übergeben wird. Hiervon ist auch die Ausrichtung des Popovers abhängig, die allerdings auch nachträglich geändert werden kann.
- Ein Popover darf nicht gleich beim Öffnen des Fensters gezeigt werden, dies führt zu Fehlverhalten. Erst nachträglich sollte es in einem Event-listener mit
set_visible (true)
gezeigt werden. Um das Verbergen des Popovers muss man sich nicht kümmern, es erfolgt automatisch. - Wird ein Menü an das Popover gebunden, werden Menüeinträge, zu denen keine
GLib.Action
gefunden wird, ausgegraut und inaktiv. Dafür erwartet die Funktionbind_model
als zweiten Parameter ein Präfix, das allen Aktionen vorangestellt wird. Diese Präfixe werden automatisch durchadd_action
erzeugt und lautenapp
, wenn die Aktion derGtk.Application
zugeordnet wird, undwin
, wenn sie einemGtk.Window
zugeordnet wird.
Am Befehl für die Kompilierung hat sich natürlich nichts geändert: Einfach als popover.vala
speichern und mit
kompilieren. Zu beachten ist, dass die aktuellen Versionen libgtk-3-0
und libgtk-3-dev (>= 3.12)
benötigt werden, um das Programm zu übersetzen.
Aufhübschen
Damit die Menüeinträge ein bisschen mehr her machen, können sie mit Icons versehen werden, dafür muss das menu.append ()
durch ein menu.append_item ()
ersetzt und die entsprechenden Menü-Items gebaut werden:
Das funktioniert zwar, allerdings entspricht das Ergebnis wohl nicht ganz dem, was der Benutzer von einem Popover erwartet:
Auswahl
Ein besonders passender Anwendungsfall für Popover sind Auswahlmöglichkeiten, die das Verhalten eines anderes Widgets beeinflussen, da sie genau hierfür konzipiert wurden: Sie sollen eine Möglichkeit bieten, einfache und häufig geänderte Einstellungen ‘an Ort und Stelle’ erreichbar zu machen.
Sehen wir uns also das Suchfeld – welches im Übrigen der Aktualität halber durch ein Gtk.SearchEntry
ersetzt wurde – der Beispielanwendung an: Vorstellbar ist zum Beispiel, dass es eine Auswahlmöglichkeit gibt, ob im Internet oder nur lokal gesucht werden soll. Dies lässt sich leicht durch die Verwendung einer Gtk.Box
oder eines Gtk.Grid
erreichen:
Über diese Container sind natürlich sehr komplexe Inhalte für Popover möglich, fast alle Widgets, die in eine Gtk.Box
oder ein Gtk.Grid
gepackt werden können, können somit auch Inhalt eines Popover werden.
In diesem Sinne viel Spaß mit dieser neuen Fähigkeit von GTK und erfolgreiches Coden!