<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom"><updated>2010-02-16T08:21:51-06:00</updated><title type="text">Feed for edmann.com</title><link href="http://www.edmann.com/Open-Source/2010/02/16/gnome-gtk-system-tray-in-C/feed/atom.xml" rel="self"/><author><name>edmann.com</name><email>support@arctechnologies.net</email><uri>http://edmann.com</uri></author><id>urn:uuid:61a0877b-9f9a-311b-a922-99fb9d4529c7</id><category term="Open-Source"/><subtitle type="text"></subtitle><entry><title>gnome gtk system-tray in C</title><link href="/Open-Source/2010/02/16/gnome-gtk-system-tray-in-C"/><id>urn:uuid:4ab919a7-35db-3f0b-82e7-0275108e0640</id><updated>2010-02-16T08:18:32-06:00</updated><summary type="html"><![CDATA[<p>I was looking for a simple tutorial on how to make system tray icon in C. Well i found this <a href="http://blog.sacaluta.com/2007/08/gtk-system-tray-icon-example.html">page</a> and tried the example. Just needed to add &lt;gtk/gtk.h&gt; to the include and it compiled and worked just fine. I&nbsp;am adding it here so </p>
<ol>
    <li>&nbsp;it's easier for me to find when i actually need it again, </li>
    <li>sites tend to disappear on the net, so this is my backup copy.</li>
</ol>
<p><code>#include &lt;gtk/gtk.h&gt;<br />
<br />
void tray_icon_on_click(GtkStatusIcon *status_icon,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; gpointer user_data)<br />
{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; printf(&quot;Clicked on tray icon\n&quot;);<br />
}<br />
<br />
void tray_icon_on_menu(GtkStatusIcon *status_icon, guint button,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; guint activate_time, gpointer user_data)<br />
{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; printf(&quot;Popup menu\n&quot;);<br />
}<br />
<br />
static GtkStatusIcon *create_tray_icon() {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; GtkStatusIcon *tray_icon;<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; tray_icon = gtk_status_icon_new();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; g_signal_connect(G_OBJECT(tray_icon), &quot;activate&quot;,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; G_CALLBACK(tray_icon_on_click), NULL);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; g_signal_connect(G_OBJECT(tray_icon),<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &quot;popup-menu&quot;,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; G_CALLBACK(tray_icon_on_menu), NULL);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; gtk_status_icon_set_from_icon_name(tray_icon,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; GTK_STOCK_MEDIA_STOP);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; gtk_status_icon_set_tooltip(tray_icon,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &quot;Example Tray Icon&quot;);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; gtk_status_icon_set_visible(tray_icon, TRUE);<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return tray_icon;<br />
}<br />
<br />
int main(int argc, char **argv) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; GtkStatusIcon *tray_icon;<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; gtk_init(&amp;argc, &amp;argv);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; tray_icon = create_tray_icon();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; gtk_main();<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return 0;<br />
}<br />
</code></p>]]></summary><category term="Open Source"/><published>2010-02-16T08:21:51-06:00</published><content type="html"><![CDATA[<p>I was looking for a simple tutorial on how to make system tray icon in C. Well i found this <a href="http://blog.sacaluta.com/2007/08/gtk-system-tray-icon-example.html">page</a> and tried the example. Just needed to add &lt;gtk/gtk.h&gt; to the include and it compiled and worked just fine. I&nbsp;am adding it here so</p>
<ol>
    <li>&nbsp;it's easier for me to find when i actually need it again,</li>
    <li>sites tend to disappear on the net, so this is my backup copy.</li>
</ol>
<p>Save the following code into main.c file.</p>
<p><code>#include &lt;gtk/gtk.h&gt;<br />
<br />
void tray_icon_on_click(GtkStatusIcon *status_icon,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; gpointer user_data)<br />
{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; printf(&quot;Clicked on tray icon\n&quot;);<br />
}<br />
<br />
void tray_icon_on_menu(GtkStatusIcon *status_icon, guint button,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; guint activate_time, gpointer user_data)<br />
{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; printf(&quot;Popup menu\n&quot;);<br />
}<br />
<br />
static GtkStatusIcon *create_tray_icon() {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; GtkStatusIcon *tray_icon;<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; tray_icon = gtk_status_icon_new();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; g_signal_connect(G_OBJECT(tray_icon), &quot;activate&quot;,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; G_CALLBACK(tray_icon_on_click), NULL);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; g_signal_connect(G_OBJECT(tray_icon),<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &quot;popup-menu&quot;,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; G_CALLBACK(tray_icon_on_menu), NULL);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; gtk_status_icon_set_from_icon_name(tray_icon,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; GTK_STOCK_MEDIA_STOP);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; gtk_status_icon_set_tooltip(tray_icon,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &quot;Example Tray Icon&quot;);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; gtk_status_icon_set_visible(tray_icon, TRUE);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return tray_icon;<br />
}<br />
<br />
int main(int argc, char **argv) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; GtkStatusIcon *tray_icon;<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; gtk_init(&amp;argc, &amp;argv);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; tray_icon = create_tray_icon();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; gtk_main();<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return 0;<br />
}<br />
</code></p>
<p>You compile the app with the following</p>
<p><code>gcc main.c -o tray-icon `pkg-config --cflags --libs gtk+-2.0`</code></p>
<p>Then launch it ./tray-icon</p>
<p>You should see a gray &quot;stop&quot; box appear in the tray. Easy as that.</p>]]></content></entry></feed>

