Set Selection

#!/usr/bin/env python
#
# [SNIPPET_NAME: Set Selection]
# [SNIPPET_CATEGORIES: PyGTK]
# [SNIPPET_DESCRIPTION: Dealing with selections]

# example setselection.py

import pygtk
pygtk.require('2.0')
import gtk
import time

class SetSelectionExample:
    # Callback when the user toggles the selection
    def selection_toggled(self, widget, window):
        if widget.get_active():
            self.have_selection = window.selection_owner_set("PRIMARY")
            # if claiming the selection failed, we return the button to
            # the out state
            if not self.have_selection:
                widget.set_active(False)
        else:
            if self.have_selection:
                # Not possible to release the selection in PyGTK
                # just mark that we don't have it
                self.have_selection = False
        return

    # Called when another application claims the selection
    def selection_clear(self, widget, event):
        self.have_selection = False
        widget.set_active(False)
        return True

    # Supplies the current time as the selection.
    def selection_handle(self, widget, selection_data, info, time_stamp):
        current_time = time.time()
        timestr = time.asctime(time.localtime(current_time))

        # When we return a single string, it should not be null terminated.
        # That will be done for us
        selection_data.set_text(timestr, len(timestr))
        return

    def __init__(self):
        self.have_selection = False
        # Create the toplevel window
        window = gtk.Window(gtk.WINDOW_TOPLEVEL)
        window.set_title("Set Selection")
        window.set_border_width(10)
        window.connect("destroy", lambda w: gtk.main_quit())
        self.window = window
        # Create an eventbox to hold the button since it no longer has
        # a GdkWindow
        eventbox = gtk.EventBox()
        eventbox.show()
        window.add(eventbox)
        
        # Create a toggle button to act as the selection
        selection_button = gtk.ToggleButton("Claim Selection")
        eventbox.add(selection_button)

        selection_button.connect("toggled", self.selection_toggled, eventbox)
        eventbox.connect_object("selection_clear_event", self.selection_clear,
                                selection_button)

        eventbox.selection_add_target("PRIMARY", "STRING", 1)
        eventbox.selection_add_target("PRIMARY", "COMPOUND_TEXT", 1)
        eventbox.connect("selection_get", self.selection_handle)
        selection_button.show()
        window.show()

def main():
    gtk.main()
    return 0

if __name__ == "__main__":
    SetSelectionExample()
    main()