<html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Appendix C. Creating your own signals</title> <link rel="stylesheet" href="style.css" type="text/css"> <meta name="generator" content="DocBook XSL Stylesheets V1.75.1"> <link rel="home" href="index.html" title="Programming with gtkmm"> <link rel="up" href="index.html" title="Programming with gtkmm"> <link rel="prev" href="sec-xeventsignals.html" title="X Event signals"> <link rel="next" href="sec-signals-comparison.html" title="Appendix D. Comparison with other signalling systems"> </head> <body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"> <div class="navheader"> <table width="100%" summary="Navigation header"> <tr><th colspan="3" align="center">Appendix C. Creating your own signals</th></tr> <tr> <td width="20%" align="left"> <a accesskey="p" href="sec-xeventsignals.html"><img src="icons/prev.png" alt="Prev"></a> </td> <th width="60%" align="center"> </th> <td width="20%" align="right"> <a accesskey="n" href="sec-signals-comparison.html"><img src="icons/next.png" alt="Next"></a> </td> </tr> </table> <hr> </div> <div class="appendix" title="Appendix C. Creating your own signals"> <div class="titlepage"><div><div><h2 class="title"> <a name="chapter-custom-signals"></a>Appendix C. Creating your own signals</h2></div></div></div> <p> Now that you've seen signals and signal handlers in <span class="application">gtkmm</span>, you might like to use the same technique to allow interaction between your own classes. That's actually very simple by using the <span class="application">libsigc++</span> library directly. </p> <p> This isn't purely a <span class="application">gtkmm</span> or GUI issue. <span class="application">gtkmm</span> uses <span class="application">libsigc++</span> to implement its proxy wrappers for the <span class="application">GTK+</span> signal system, but for new, non-GTK+ signals, you can create pure C++ signals, using the <code class="classname">sigc::signal<></code> template. </p> <p> For instance, to create a signal that sends 2 parameters, a <span class="type">bool</span> and an <span class="type">int</span>, just declare a <code class="classname">sigc::signal</code>, like so: </p> <pre class="programlisting"> sigc::signal<void, bool int> signal_something; </pre> <p> </p> <p> You could just declare that signal as a public member variable, but some people find that distasteful and prefer to make it available via an accessor method, like so: </p> <pre class="programlisting"> class Server { //signal accessor: typedef sigc::signal<void, bool, int> type_signal_something; type_signal_something signal_something(); protected: type_signal_something m_signal_something; }; Server::type_signal_something Server::signal_something() { return m_signal_something; } </pre> <p> </p> <p> You can then connect to the signal using the same syntax used when connecting to <span class="application">gtkmm</span> signals. For instance, </p> <pre class="programlisting"> server.signal_something().connect( sigc::mem_fun(client, &Client::on_server_something) ); </pre> <p> </p> <p> See <code class="filename">examples/book/signals/custom/</code> for a full working example. </p> </div> <div class="navfooter"> <hr> <table width="100%" summary="Navigation footer"> <tr> <td width="40%" align="left"> <a accesskey="p" href="sec-xeventsignals.html"><img src="icons/prev.png" alt="Prev"></a> </td> <td width="20%" align="center"> </td> <td width="40%" align="right"> <a accesskey="n" href="sec-signals-comparison.html"><img src="icons/next.png" alt="Next"></a> </td> </tr> <tr> <td width="40%" align="left" valign="top">X Event signals </td> <td width="20%" align="center"><a accesskey="h" href="index.html"><img src="icons/home.png" alt="Home"></a></td> <td width="40%" align="right" valign="top"> Appendix D. Comparison with other signalling systems</td> </tr> </table> </div> </body> </html>