#+BEGIN_COMMENT
.. title: GTK-3 custom signals example
.. slug: 16-gtk3-custom-signals-example
.. date: 2014-09-11 12:00:00 UTC
.. tags: GTK-3, python, widgets, signals
.. category: python
.. description: Simple example on how to setup, connect to and trigger signals.
.. type: text
#+END_COMMENT


#+CAPTION: Opengl touch events
[[../../../images/gtk/tut16-signals.png]]


#append this to module path so we can load from the parent directory
import sys, os
from scaffold import web
from scaffold.loaders import load, load_partial


class page:
    name = __name__
    title = 'GTK3 custom signals example'
    tags = 'GTK3', 'Python', 'signals'
    intro = 'Simple example on how to setup, connect to and trigger signals.'
    date = '2014-09-11'
    path = os.path.abspath('./')
    image = web.template.path_image + '/gtk/tut16-signals.png'

    def create_content(self):
        web.images.create(self.image, title='GTK Window')
        web.page.section(
            web.div.create(
                web.images.render()
            ).set_classes('sources').render()
        )

        web.paragraph.create(
            """In this program we create 4 custom signals, the first to are connected to and triggered on launch, the latter two are triggered when you click the buttons.""")
        web.page.section(web.paragraph.render())
        
        web.paragraph.create(
            """We can create new signals using GObject.signal_new, we can then connect the new signal and callback as we normally would using widget .connect methods as normal. 
            To trigger our custom event we use the .emit() method, this method also aalows us to fake events, for example we might want to fake the user clicking a button.""")
        web.page.section(web.paragraph.render())

        web.link.create('Launchpad','Gtk signals','http://bazaar.launchpad.net/~oly/python-examples/trunk/files/head:/python-examples/gtk3/')

        print self.files
        web.pre.create(load(self.files + '/gtk3/tut16/tut16-signals.py'))
        web.page.section(web.pre.render())
