I’ve recently played around with GtkTextBuffer. It’s a rather nice text editing widget (or rather widget part). Unfortunately it misses one functionality, which is also missing from GtkEditable derived widgets: A signal for selection changes. There are two workarounds:
- You can setup a notification on the “has-selection” property like this:
buffer.connect("notify", on_buffer_notify) def on_buffer_notify(buffer, prop): if prop.name == "has-selection": if buffer.get_has_selection(): ... else: ...
This method only works if you are interested in whether there is a selection or not, not if you are interested in any selection changes. Also, this method works only for GtkTextBuffers, not for GtkEditables.
- Tomboy uses a timeout to check the selection status:
namespace Tomboy { public class NoteWindow : ForcedPresentWindow { ... public NoteWindow (Note note) : base (note.Title) { ... // Sensitize the Link toolbar button on text selection mark_set_timeout = new InterruptableTimeout(); mark_set_timeout.Timeout = UpdateLinkButtonSensitivity; ... } ... void UpdateLinkButtonSensitivity (object sender, EventArgs args) { link_button.Sensitive = (note.Buffer.Selection != null); } ... } }
This method works, but seems a bit complicated, when a simple signal should do the trick.
Filed as bug #448261.
Leave a Reply