<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> <title>i3: src/sighandler.c File Reference</title> <link href="tabs.css" rel="stylesheet" type="text/css"/> <link href="doxygen.css" rel="stylesheet" type="text/css"/> </head> <body> <!-- Generated by Doxygen 1.6.2-20100208 --> <div class="navigation" id="top"> <div class="tabs"> <ul> <li><a href="index.html"><span>Main Page</span></a></li> <li><a href="annotated.html"><span>Data Structures</span></a></li> <li class="current"><a href="files.html"><span>Files</span></a></li> </ul> </div> <div class="tabs"> <ul> <li><a href="files.html"><span>File List</span></a></li> <li><a href="globals.html"><span>Globals</span></a></li> </ul> </div> </div> <div class="contents"> <h1>src/sighandler.c File Reference</h1><code>#include <ev.h></code><br/> <code>#include <stdio.h></code><br/> <code>#include <stdlib.h></code><br/> <code>#include <string.h></code><br/> <code>#include <unistd.h></code><br/> <code>#include <iconv.h></code><br/> <code>#include <signal.h></code><br/> <code>#include <xcb/xcb.h></code><br/> <code>#include <xcb/xcb_aux.h></code><br/> <code>#include <xcb/xcb_event.h></code><br/> <code>#include <xcb/xcb_keysyms.h></code><br/> <code>#include <X11/keysym.h></code><br/> <code>#include "<a class="el" href="a00041_source.html">i3.h</a>"</code><br/> <code>#include "<a class="el" href="a00052_source.html">util.h</a>"</code><br/> <code>#include "<a class="el" href="a00054_source.html">xcb.h</a>"</code><br/> <code>#include "<a class="el" href="a00044_source.html">log.h</a>"</code><br/> <code>#include "<a class="el" href="a00034_source.html">config.h</a>"</code><br/> <code>#include "<a class="el" href="a00048_source.html">randr.h</a>"</code><br/> <div class="dynheader"> Include dependency graph for sighandler.c:</div> <div class="dynsection"> </div> <p><a href="a00075_source.html">Go to the source code of this file.</a></p> <table border="0" cellpadding="0" cellspacing="0"> <tr><td colspan="2"><h2>Functions</h2></td></tr> <tr><td class="memItemLeft" align="right" valign="top">static int </td><td class="memItemRight" valign="bottom"><a class="el" href="a00075.html#a31aa6fd12baddf237a3aec1a03e5d9a5">sig_draw_window</a> (xcb_connection_t *conn, xcb_window_t win, int width, int height, int font_height)</td></tr> <tr><td class="memItemLeft" align="right" valign="top">static int </td><td class="memItemRight" valign="bottom"><a class="el" href="a00075.html#afd2deb48146e0d8d84b5bbdbee8b76c7">sig_handle_key_press</a> (void *ignored, xcb_connection_t *conn, xcb_key_press_event_t *event)</td></tr> <tr><td class="memItemLeft" align="right" valign="top">static xcb_window_t </td><td class="memItemRight" valign="bottom"><a class="el" href="a00075.html#a12a31f7912e49b4e055b3f23aa95248d">open_input_window</a> (xcb_connection_t *conn, <a class="el" href="a00020.html">Rect</a> screen_rect, uint32_t width, uint32_t height)</td></tr> <tr><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00075.html#aca29388ca9e7422219ff689ee23d09bc">handle_signal</a> (int sig, siginfo_t *info, void *data)</td></tr> <tr><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="a00075.html#ae057b3065391c2db8120a38fe9d805b4">setup_signal_handler</a> ()</td></tr> <tr><td class="mdescLeft"> </td><td class="mdescRight">Setup signal handlers to safely handle SIGSEGV and SIGFPE. <a href="#ae057b3065391c2db8120a38fe9d805b4"></a><br/></td></tr> <tr><td colspan="2"><h2>Variables</h2></td></tr> <tr><td class="memItemLeft" align="right" valign="top">static xcb_gcontext_t </td><td class="memItemRight" valign="bottom"><a class="el" href="a00075.html#ab47f85935c9fee430cb37973cf44e490">pixmap_gc</a></td></tr> <tr><td class="memItemLeft" align="right" valign="top">static xcb_pixmap_t </td><td class="memItemRight" valign="bottom"><a class="el" href="a00075.html#a81dcec2414a6c7beb665ce0fe5e1eaf6">pixmap</a></td></tr> <tr><td class="memItemLeft" align="right" valign="top">static int </td><td class="memItemRight" valign="bottom"><a class="el" href="a00075.html#a2b30b9b043c3efde6d659eb0e579998a">raised_signal</a></td></tr> <tr><td class="memItemLeft" align="right" valign="top">static char * </td><td class="memItemRight" valign="bottom"><a class="el" href="a00075.html#a64d1c56bede447f9de2cccf6326c5ccb">crash_text</a> []</td></tr> <tr><td class="memItemLeft" align="right" valign="top">static int </td><td class="memItemRight" valign="bottom"><a class="el" href="a00075.html#adb8e591cad2f13bf07542bb3b488ac3a">crash_text_longest</a> = 1</td></tr> </table> <hr/><h2>Function Documentation</h2> <a class="anchor" id="aca29388ca9e7422219ff689ee23d09bc"></a><!-- doxytag: member="sighandler.c::handle_signal" ref="aca29388ca9e7422219ff689ee23d09bc" args="(int sig, siginfo_t *info, void *data)" --> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">void handle_signal </td> <td>(</td> <td class="paramtype">int </td> <td class="paramname"> <em>sig</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">siginfo_t * </td> <td class="paramname"> <em>info</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">void * </td> <td class="paramname"> <em>data</em></td><td> </td> </tr> <tr> <td></td> <td>)</td> <td></td><td></td><td></td> </tr> </table> </div> <div class="memdoc"> <p>Definition at line <a class="el" href="a00075_source.html#l00151">151</a> of file <a class="el" href="a00075_source.html">sighandler.c</a>.</p> <p>References <a class="el" href="a00036_source.html#l00520">xoutput::active</a>, <a class="el" href="a00062_source.html#l00037">config</a>, <a class="el" href="a00077_source.html#l00175">convert_utf8_to_ucs2()</a>, <a class="el" href="a00075_source.html#l00040">crash_text</a>, <a class="el" href="a00075_source.html#l00047">crash_text_longest</a>, <a class="el" href="a00044_source.html#l00021">DLOG</a>, <a class="el" href="a00034_source.html#l00087">Config::font</a>, <a class="el" href="a00071_source.html#l00058">global_conn</a>, <a class="el" href="a00036_source.html#l00331">Font::height</a>, <a class="el" href="a00036_source.html#l00333">Font::id</a>, <a class="el" href="a00054.html#a50c1fc0de5343536d542c8349ab7ab0d">load_font()</a>, <a class="el" href="a00075_source.html#l00111">open_input_window()</a>, <a class="el" href="a00073_source.html#l00047">outputs</a>, <a class="el" href="a00075_source.html#l00037">pixmap</a>, <a class="el" href="a00075_source.html#l00036">pixmap_gc</a>, <a class="el" href="a00079_source.html#l00301">predict_text_width()</a>, <a class="el" href="a00075_source.html#l00038">raised_signal</a>, <a class="el" href="a00036_source.html#l00531">xoutput::rect</a>, <a class="el" href="a00071_source.html#l00089">root_depth</a>, <a class="el" href="a00075_source.html#l00053">sig_draw_window()</a>, <a class="el" href="a00075_source.html#l00085">sig_handle_key_press()</a>, <a class="el" href="a00047_source.html#l00335">TAILQ_FOREACH</a>, and <a class="el" href="a00079_source.html#l00133">xcb_change_gc_single()</a>.</p> <p>Referenced by <a class="el" href="a00075_source.html#l00214">setup_signal_handler()</a>.</p> <p><div class="dynheader"> Here is the call graph for this function:</div> <div class="dynsection"> </div> </p> </div> </div> <a class="anchor" id="a12a31f7912e49b4e055b3f23aa95248d"></a><!-- doxytag: member="sighandler.c::open_input_window" ref="a12a31f7912e49b4e055b3f23aa95248d" args="(xcb_connection_t *conn, Rect screen_rect, uint32_t width, uint32_t height)" --> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">static xcb_window_t open_input_window </td> <td>(</td> <td class="paramtype">xcb_connection_t * </td> <td class="paramname"> <em>conn</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype"><a class="el" href="a00020.html">Rect</a> </td> <td class="paramname"> <em>screen_rect</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">uint32_t </td> <td class="paramname"> <em>width</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">uint32_t </td> <td class="paramname"> <em>height</em></td><td> </td> </tr> <tr> <td></td> <td>)</td> <td></td><td></td><td><code> [static]</code></td> </tr> </table> </div> <div class="memdoc"> <p>Definition at line <a class="el" href="a00075_source.html#l00111">111</a> of file <a class="el" href="a00075_source.html">sighandler.c</a>.</p> <p>References <a class="el" href="a00036_source.html#l00100">Rect::height</a>, <a class="el" href="a00071_source.html#l00085">root</a>, <a class="el" href="a00036_source.html#l00099">Rect::width</a>, <a class="el" href="a00036_source.html#l00097">Rect::x</a>, <a class="el" href="a00036_source.html#l00098">Rect::y</a>, and <a class="el" href="a00068_source.html#l00041">y</a>.</p> <p>Referenced by <a class="el" href="a00075_source.html#l00151">handle_signal()</a>.</p> </div> </div> <a class="anchor" id="ae057b3065391c2db8120a38fe9d805b4"></a><!-- doxytag: member="sighandler.c::setup_signal_handler" ref="ae057b3065391c2db8120a38fe9d805b4" args="()" --> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">void setup_signal_handler </td> <td>(</td> <td class="paramname"></td> <td> ) </td> <td></td> </tr> </table> </div> <div class="memdoc"> <p>Setup signal handlers to safely handle SIGSEGV and SIGFPE. </p> <p>Definition at line <a class="el" href="a00075_source.html#l00214">214</a> of file <a class="el" href="a00075_source.html">sighandler.c</a>.</p> <p>References <a class="el" href="a00044_source.html#l00020">ELOG</a>, and <a class="el" href="a00075_source.html#l00151">handle_signal()</a>.</p> <p>Referenced by <a class="el" href="a00071_source.html#l00193">main()</a>.</p> <p><div class="dynheader"> Here is the call graph for this function:</div> <div class="dynsection"> </div> </p> </div> </div> <a class="anchor" id="a31aa6fd12baddf237a3aec1a03e5d9a5"></a><!-- doxytag: member="sighandler.c::sig_draw_window" ref="a31aa6fd12baddf237a3aec1a03e5d9a5" args="(xcb_connection_t *conn, xcb_window_t win, int width, int height, int font_height)" --> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">static int sig_draw_window </td> <td>(</td> <td class="paramtype">xcb_connection_t * </td> <td class="paramname"> <em>conn</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">xcb_window_t </td> <td class="paramname"> <em>win</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">int </td> <td class="paramname"> <em>width</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">int </td> <td class="paramname"> <em>height</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">int </td> <td class="paramname"> <em>font_height</em></td><td> </td> </tr> <tr> <td></td> <td>)</td> <td></td><td></td><td><code> [static]</code></td> </tr> </table> </div> <div class="memdoc"> <p>Definition at line <a class="el" href="a00075_source.html#l00053">53</a> of file <a class="el" href="a00075_source.html">sighandler.c</a>.</p> <p>References <a class="el" href="a00077_source.html#l00175">convert_utf8_to_ucs2()</a>, <a class="el" href="a00075_source.html#l00040">crash_text</a>, <a class="el" href="a00079_source.html#l00077">get_colorpixel()</a>, <a class="el" href="a00075_source.html#l00037">pixmap</a>, <a class="el" href="a00075_source.html#l00036">pixmap_gc</a>, and <a class="el" href="a00079_source.html#l00133">xcb_change_gc_single()</a>.</p> <p>Referenced by <a class="el" href="a00075_source.html#l00151">handle_signal()</a>.</p> <p><div class="dynheader"> Here is the call graph for this function:</div> <div class="dynsection"> </div> </p> </div> </div> <a class="anchor" id="afd2deb48146e0d8d84b5bbdbee8b76c7"></a><!-- doxytag: member="sighandler.c::sig_handle_key_press" ref="afd2deb48146e0d8d84b5bbdbee8b76c7" args="(void *ignored, xcb_connection_t *conn, xcb_key_press_event_t *event)" --> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">static int sig_handle_key_press </td> <td>(</td> <td class="paramtype">void * </td> <td class="paramname"> <em>ignored</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">xcb_connection_t * </td> <td class="paramname"> <em>conn</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">xcb_key_press_event_t * </td> <td class="paramname"> <em>event</em></td><td> </td> </tr> <tr> <td></td> <td>)</td> <td></td><td></td><td><code> [static]</code></td> </tr> </table> </div> <div class="memdoc"> <p>Definition at line <a class="el" href="a00075_source.html#l00085">85</a> of file <a class="el" href="a00075_source.html">sighandler.c</a>.</p> <p>References <a class="el" href="a00044_source.html#l00021">DLOG</a>, <a class="el" href="a00077_source.html#l00514">i3_restart()</a>, <a class="el" href="a00071_source.html#l00066">keysyms</a>, <a class="el" href="a00075_source.html#l00038">raised_signal</a>, and <a class="el" href="a00054.html#ac430ae06cbf6f5ef252c9ebfca47e644">xcb_numlock_mask</a>.</p> <p>Referenced by <a class="el" href="a00075_source.html#l00151">handle_signal()</a>.</p> <p><div class="dynheader"> Here is the call graph for this function:</div> <div class="dynsection"> </div> </p> </div> </div> <hr/><h2>Variable Documentation</h2> <a class="anchor" id="a64d1c56bede447f9de2cccf6326c5ccb"></a><!-- doxytag: member="sighandler.c::crash_text" ref="a64d1c56bede447f9de2cccf6326c5ccb" args="[]" --> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">char* <a class="el" href="a00075.html#a64d1c56bede447f9de2cccf6326c5ccb">crash_text</a>[]<code> [static]</code></td> </tr> </table> </div> <div class="memdoc"> <b>Initial value:</b><div class="fragment"><pre class="fragment"> { <span class="stringliteral">"i3 just crashed."</span>, <span class="stringliteral">"To debug this problem, either attach gdb now"</span>, <span class="stringliteral">"or press 'e' to exit and get a core-dump."</span>, <span class="stringliteral">"If you want to keep your session,"</span>, <span class="stringliteral">"press 'r' to restart i3 in-place."</span> } </pre></div> <p>Definition at line <a class="el" href="a00075_source.html#l00040">40</a> of file <a class="el" href="a00075_source.html">sighandler.c</a>.</p> <p>Referenced by <a class="el" href="a00075_source.html#l00151">handle_signal()</a>, and <a class="el" href="a00075_source.html#l00053">sig_draw_window()</a>.</p> </div> </div> <a class="anchor" id="adb8e591cad2f13bf07542bb3b488ac3a"></a><!-- doxytag: member="sighandler.c::crash_text_longest" ref="adb8e591cad2f13bf07542bb3b488ac3a" args="" --> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">int <a class="el" href="a00075.html#adb8e591cad2f13bf07542bb3b488ac3a">crash_text_longest</a> = 1<code> [static]</code></td> </tr> </table> </div> <div class="memdoc"> <p>Definition at line <a class="el" href="a00075_source.html#l00047">47</a> of file <a class="el" href="a00075_source.html">sighandler.c</a>.</p> <p>Referenced by <a class="el" href="a00075_source.html#l00151">handle_signal()</a>.</p> </div> </div> <a class="anchor" id="a81dcec2414a6c7beb665ce0fe5e1eaf6"></a><!-- doxytag: member="sighandler.c::pixmap" ref="a81dcec2414a6c7beb665ce0fe5e1eaf6" args="" --> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">xcb_pixmap_t <a class="el" href="a00075.html#a81dcec2414a6c7beb665ce0fe5e1eaf6">pixmap</a><code> [static]</code></td> </tr> </table> </div> <div class="memdoc"> <p>Definition at line <a class="el" href="a00075_source.html#l00037">37</a> of file <a class="el" href="a00075_source.html">sighandler.c</a>.</p> <p>Referenced by <a class="el" href="a00075_source.html#l00151">handle_signal()</a>, and <a class="el" href="a00075_source.html#l00053">sig_draw_window()</a>.</p> </div> </div> <a class="anchor" id="ab47f85935c9fee430cb37973cf44e490"></a><!-- doxytag: member="sighandler.c::pixmap_gc" ref="ab47f85935c9fee430cb37973cf44e490" args="" --> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">xcb_gcontext_t <a class="el" href="a00075.html#ab47f85935c9fee430cb37973cf44e490">pixmap_gc</a><code> [static]</code></td> </tr> </table> </div> <div class="memdoc"> <p>Definition at line <a class="el" href="a00075_source.html#l00036">36</a> of file <a class="el" href="a00075_source.html">sighandler.c</a>.</p> <p>Referenced by <a class="el" href="a00075_source.html#l00151">handle_signal()</a>, and <a class="el" href="a00075_source.html#l00053">sig_draw_window()</a>.</p> </div> </div> <a class="anchor" id="a2b30b9b043c3efde6d659eb0e579998a"></a><!-- doxytag: member="sighandler.c::raised_signal" ref="a2b30b9b043c3efde6d659eb0e579998a" args="" --> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">int <a class="el" href="a00075.html#a2b30b9b043c3efde6d659eb0e579998a">raised_signal</a><code> [static]</code></td> </tr> </table> </div> <div class="memdoc"> <p>Definition at line <a class="el" href="a00075_source.html#l00038">38</a> of file <a class="el" href="a00075_source.html">sighandler.c</a>.</p> <p>Referenced by <a class="el" href="a00075_source.html#l00151">handle_signal()</a>, and <a class="el" href="a00075_source.html#l00085">sig_handle_key_press()</a>.</p> </div> </div> </div> <hr class="footer"/><address style="text-align: right;"><small>Generated by <a href="http://www.doxygen.org/index.html"> <img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.2-20100208 </small></address> </body> </html>