2012-05-09 13 views
5

Mam kolekcję widżetów GtkEntry, z których niektóre można edytować i można je ustawiać, a niektóre z nich nie. Chciałbym się dowiedzieć, które, jeśli jakiekolwiek, mają obecnie zaznaczony tekst, aby zaimplementować element menu Edycja-> Kopiuj. Czy jest jakiś sposób na zrobienie tego innego niż iterowanie po wszystkich widżetach do momentu, aż gtk_editable_get_selection_bounds zwróci true?Dowiedz się, który widget gtk ma aktualny wybór

Obecnie omijam ten problem, dzwoniąc pod numer gtk_clipboard_get(GDK_SELECTION_PRIMARY), ale z tego, co mówią doktorzy, to nie jest przenośne (i będzie także pobierać tekst wybrany w dowolnym miejscu w obrębie bieżącego ekranu, a nie tylko z poziomu mojej aplikacji).

+0

Niestety, nie wydaje się, aby sygnał, gdy widżet twierdzi, wyboru, ale może być w stanie użyć tej samej obsługi sygnału "wyboru-get" dla każdego wpisu, a następnie fałszywy konwersji selekcji, aby uzyskać połączenie dla wpisu z zaznaczeniem (jeśli istnieje). – ergosys

+0

ergosys: co rozumiesz przez fałszywą konwersję selekcji? –

+0

Poproś o konwersję wyboru bez faktycznego zamiaru otrzymania danych. To znaczy. wywołanie gtk_selection_convert(), ale nie ma obsługi sygnału "select-received" (lub może być skrótem). – ergosys

Odpowiedz

1

Czy próbowałeś już gtk_window_get_focus()? Użytkownicy często wchodzą w interakcję z wpisami, więc może Ci się to udać. Dokumentacja mówi, że "pobiera aktualny aktywny widget w oknie". Możesz sam to sprawdzić here. Następnie porównaj, czy pobrany widget jest jednym z twoich wpisów.

Po uzyskaniu skoncentrowanego wpisu, być może chciałbyś uzyskać jego tekst za pomocą gtk_entry_get_text(), jednak otrzyma on cały tekst we wpisie. Jeśli to nie odpowiada twoim celom, rozwiązaniem może być użycie gtk_editable_copy_clipboard(), które kopiuje zawartość aktualnie wybranej treści w edytowalnym (oczywiście, rzucając wpis do edycji) i umieszcza ją w schowku. Następnie, jeśli ma zastosowanie, wklej to, co zostało skopiowane, używając gtk_editable_paste_clipboard().

+0

'g_signal_emit_by_name (wpis," copy-clipboard ", NULL)' również działa na potrzeby kopiowania. – ptomato

+0

to była pierwsza rzecz, którą próbowałem, ale to nie zadziałało, ponieważ skoncentrowany wpis niekoniecznie jest wpisem z wyborem tekstu –