benachrichtigung bei ende von delete-range(textbuffer)?

Programmierung für GNOME und GTK+, GUI-Erstellung mit Glade.
Antworten
sylpheed
User
Beiträge: 40
Registriert: Dienstag 24. März 2009, 13:58

gibt es eine möglichkeit über das ende der delete-range routine benachrichtigt zu werden?
habe nämlich das problem, dass sie mehrmal durchgeführt wird, wenn ich nicht editierbaren text in der selection habe und somit mit textbuffer.connect_after('delete-range', self.delete-range_cb) zum teil die routine störe.
Benutzeravatar
Trundle
User
Beiträge: 591
Registriert: Dienstag 3. Juli 2007, 16:45

Der Callback bekommt ja einen Start- und End-Iter übergeben, den könnte man überprüfen, ob der mit dem Ende der Selektion übereinstimmt (TextBuffer haben eine `get_selection_bounds()`-Methode, TextIter eine `compare()`-Methode). Allerdings funktioniert das dann nicht mit `connect_after`, weil die Selektion zu dem Zeitpunkt dann schon nicht mehr existiert.
"Der Dumme erwartet viel. Der Denkende sagt wenig." ("Herr Keuner" -- Bertolt Brecht)
sylpheed
User
Beiträge: 40
Registriert: Dienstag 24. März 2009, 13:58

das mit den start- und endmarks wird nicht funktionieren, da ich durch den nicht-editierbaren text auch nach durchlauf der delete-range-routine noch den nicht löschbaren text markiert habe.
hat die routine evtl. einen "laufende" mark, die anzeigt, bis wohin der löschvorgang schon fortgeschritten ist?
ich hatte es auch schon mit einer routine versucht, die überprüft, ob der noch markierte text komplett uneditierbar ist: das führte allerdings zu problemen, wenn am ende der ursprünglichen markierung nicht-editierbarer text war, denn dann hat meine routine angezeigt, dass eigentlich nichts mehr zu löschen war (alles uneditierbarer text) und denoch wurde die die default-löschroutine ein weiteres mal durchlaufen und das nachdem ich im textbuffer etwas geändert hatte und somit textiter ungültig geworden sind.

edit: ich gehe davon aus, dass mein problem ist, dass wenn meine selection mit nicht editierbarem text endet, zum schluss noch eine kontroll-routine durchläuft, die überprüft, ob das (letzte) textstück löschbar ist. da es nicht löschbar ist wird False zurückgegeben und delete-range wird nicht weiter ausgelöst.
da die von mir erdachte kontrolle vor dieser kontrolle abläuft, wird deren iter ungültig und ich bekomme probleme. hat jemand eine idee, welches signal ich da blockieren oder verbinden müsste?
Antworten